npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@opsrev/acculynx-cli

v1.13.1

Published

AccuLynx MCP server & CLI — use the AccuLynx roofing CRM in Claude Desktop, Cursor, and any MCP client. Also a JSON CLI for scripts and AI agents.

Readme

AccuLynx MCP Server & CLI

npm: acculynx-mcp (MCP server) · @opsrev/acculynx-cli (CLI + MCP)

CI

An MCP server for the AccuLynx roofing CRM — bring jobs, contacts, and estimates into Claude Desktop, Cursor, or any MCP client. Every tool is exposed with an enforced JSON Schema, so an AI agent can't invent a parameter or call a command that doesn't exist.

  • 30 tools across jobs, contacts, estimates, and users.
  • acculynx-mcp — the MCP server, for Claude Desktop / Cursor / any MCP client.
  • @opsrev/acculynx-cli — the same data as a JSON CLI (and it also ships the acculynx-mcp server bin).

Use in Claude Desktop

  1. Get an AccuLynx API key (your AccuLynx account administrator creates it under Account Settings → API).
  2. Open your Claude Desktop config file:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  3. Add the server (zero-install via npx):
{
  "mcpServers": {
    "acculynx": {
      "command": "npx",
      "args": ["-y", "acculynx-mcp"],
      "env": { "ACCULYNX_API_KEY": "your-api-key" }
    }
  }
}

Prefer a global install? Run npm i -g acculynx-mcp, then use "command": "acculynx-mcp" with no args.

  1. Restart Claude Desktop. Open a new chat and ask "List my 5 most recent AccuLynx jobs" — you should see the acculynx_* tools available.

Use in Cursor / other MCP clients

Any client that speaks MCP over stdio works. Point it at npx -y acculynx-mcp (or a global acculynx-mcp) and set ACCULYNX_API_KEY in the environment. Example (Cursor ~/.cursor/mcp.json):

{
  "mcpServers": {
    "acculynx": {
      "command": "npx",
      "args": ["-y", "acculynx-mcp"],
      "env": { "ACCULYNX_API_KEY": "your-api-key" }
    }
  }
}

MCP tools

All tools are prefixed acculynx_ and return JSON.

| Tool | Description | |------|-------------| | acculynx_ping | Health check — verify the API key and connectivity | | acculynx_jobs_list | List jobs (paginated, filterable) | | acculynx_jobs_get | Get one job by id | | acculynx_jobs_create | Create a job | | acculynx_jobs_search | Search jobs by free-text term | | acculynx_jobs_contacts | List a job's contacts | | acculynx_jobs_estimates | List a job's estimates | | acculynx_jobs_financials | Get a job's financials | | acculynx_jobs_invoices | List a job's invoices | | acculynx_jobs_milestones | List a job's milestone history | | acculynx_jobs_payments | List a job's payments | | acculynx_jobs_history | Get a job's change history | | acculynx_jobs_reps | List a job's representatives | | acculynx_jobs_reps_assign | Assign a representative to a job | | acculynx_jobs_work_types | List the company's active work types (id + name) | | acculynx_jobs_trade_types | List the company's active trade types (id + name) | | acculynx_jobs_set_work_type | Set a job's work type — by workType name or workTypeId | | acculynx_jobs_set_trade_types | Set a job's trade types — by tradeTypes names or tradeTypeIds (empty array unassigns all) | | acculynx_jobs_document_folders | List the company's document folders | | acculynx_jobs_add_expense | Record an additional expense on a job | | acculynx_jobs_upload_document | Upload a local file to a job | | acculynx_contacts_list | List contacts (paginated) | | acculynx_contacts_get | Get one contact by id | | acculynx_contacts_create | Create a contact | | acculynx_contacts_search | Search contacts within a date range | | acculynx_contacts_emails | List a contact's email addresses | | acculynx_contacts_phones | List a contact's phone numbers | | acculynx_contacts_phone_add | Add a phone number to a contact | | acculynx_estimates_list | List estimates (paginated) | | acculynx_estimates_get | Get one estimate by id | | acculynx_estimates_sections | List an estimate's sections | | acculynx_estimates_section | Get one estimate section | | acculynx_estimates_items | List items in an estimate section | | acculynx_users_list | List users (paginated, optional name/email search) |

Configuration

| Env Var | Flag | Required | Description | |---------|------|----------|-------------| | ACCULYNX_API_KEY | --api-key | Yes | AccuLynx official API key (Account Settings → API) | | ACCULYNX_EMAIL | — | No | Login email; only for tools that use AccuLynx's web API | | ACCULYNX_PASSWORD | — | No | Login password; only for web-API tools | | ACCULYNX_COMPANY_ID | — | No | Company GUID; only for web-API tools |

Also a CLI

@opsrev/acculynx-cli exposes the same data as a JSON CLI (and bundles the acculynx-mcp server bin). All output is JSON to stdout; errors are {"error": "..."} to stderr with exit code 1.

npm install -g @opsrev/acculynx-cli

acculynx ping                              # verify API key
acculynx jobs list --limit 5               # 25 results by default; --all to fetch everything
acculynx jobs get <jobId>
acculynx jobs search --query "smith"
acculynx contacts list --limit 10
acculynx estimates get <estimateId>

List commands default to 25 results; use --limit <n> or --all. Commands that create resources read a JSON body from stdin:

echo '{"name": "New Job"}' | acculynx jobs create

Pipe to jq for scripting:

JOB_ID=$(acculynx jobs list --limit 1 | jq -r '.[0].id')
acculynx jobs get "$JOB_ID" | jq .

Development

cp .env.example .env   # fill in your credentials
npm install
npm test               # run unit tests (mocked fetch)
npm run dev -- --help  # run the CLI in dev mode (auto-loads .env)
npm run build          # build both bins to dist/

npm run dev auto-loads .env via Node's --env-file:

npm run dev -- jobs list --limit 5

License

MIT