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

@boostmoveo/priority-mcp-server

v1.0.5

Published

MCP server for Priority ERP — query, create, update, and delete records via natural language

Readme

Priority ERP MCP Server

Connect Claude to your Priority ERP system. Query, create, update, delete records, and attach files — all through natural language, no OData knowledge required.

Note: This is a community project and is not officially affiliated with Priority Software Ltd.


Features

  • Natural language form discovery — ask for "customers" or "orders" without knowing internal form IDs
  • Full CRUD — query, create, update, and delete any Priority record
  • Subform navigation — fetch related data (e.g. line items under an order) in a single call
  • Rich filtering — equals, not-equals, greater/less than, wildcards, AND/OR logic
  • Pagination, sorting, field selection — keep responses concise and relevant
  • File attachments — attach local files to any Priority record
  • Schema metadata — browse available forms and fields without opening the Priority UI
  • Disk-cached metadata — schema loaded once, cached for 6 hours; works across reconnections
  • English and Hebrew search — form search uses stemming for English and direct matching for Hebrew

Prerequisites

  • Node.js >= 22.14.0
  • Claude Desktop (or any MCP-compatible AI client)
  • A Priority ERP account with API access (username/password or Personal Access Token)
  • Your Priority instance URL, company name, and tabula.ini name

Quickstart

The fastest way to connect Priority to Claude Desktop is via npx — no global install needed.

1. Find your Claude Desktop config file

| Platform | Path | | -------- | ----------------------------------------------------------------- | | macOS | ~/Library/Application Support/Claude/claude_desktop_config.json | | Windows | %APPDATA%\Claude\claude_desktop_config.json |

2. Add the server

Open claude_desktop_config.json and add the priority entry under mcpServers:

macOS / Linux:

{
  "mcpServers": {
    "priority": {
      "command": "npx",
      "args": ["--yes", "@boostmoveo/priority-mcp-server"],
      "env": {
        "PRIORITY_URL": "https://your-priority-server.com",
        "PRIORITY_TABULAINI": "tabula.ini",
        "PRIORITY_COMPANY": "your_company",
        "PRIORITY_USERNAME": "your-username",
        "PRIORITY_PASSWORD": "your-password"
      }
    }
  }
}

Windows:

{
  "mcpServers": {
    "priority": {
      "command": "cmd",
      "args": ["/c", "npx", "--yes", "@boostmoveo/priority-mcp-server"],
      "env": {
        "PRIORITY_URL": "https://your-priority-server.com",
        "PRIORITY_TABULAINI": "tabula.ini",
        "PRIORITY_COMPANY": "your_company",
        "PRIORITY_USERNAME": "your-username",
        "PRIORITY_PASSWORD": "your-password"
      }
    }
  }
}

Using a Personal Access Token (PAT):

Set PRIORITY_USERNAME to your PAT token value and PRIORITY_PASSWORD to the literal string PAT:

{
  "mcpServers": {
    "priority": {
      "command": "npx",
      "args": ["--yes", "@boostmoveo/priority-mcp-server"],
      "env": {
        "PRIORITY_URL": "https://your-priority-server.com",
        "PRIORITY_TABULAINI": "tabula.ini",
        "PRIORITY_COMPANY": "your_company",
        "PRIORITY_USERNAME": "your-pat-token",
        "PRIORITY_PASSWORD": "PAT"
      }
    }
  }
}

3. Restart Claude Desktop

After saving the config, fully quit and reopen Claude Desktop. On first launch the server loads your Priority schema — this can take 30–60 seconds on large installations.


Environment Variables

Required

| Variable | Description | Example | | -------------------- | ----------------------------------------------- | -------------------------------- | | PRIORITY_URL | Base URL of your Priority server | https://priority.mycompany.com | | PRIORITY_TABULAINI | Name of the tabula.ini file for your instance | tabula.ini | | PRIORITY_COMPANY | Internal company name in Priority | MYCOMP |

Authentication (required)

Both variables are always required. How you fill them depends on your auth method:

| Variable | Basic Auth | Personal Access Token (PAT) | | ------------------- | ---------- | --------------------------- | | PRIORITY_USERNAME | Your Priority API username | Your PAT token value | | PRIORITY_PASSWORD | Your Priority API password | The literal string PAT |

Optional

| Variable | Description | Default | | ----------------------- | --------------------------------------------------------------------------------------------- | ----------------- | | PRIORITY_SERVICE_PATH | OData service path on the server | odata/Priority | | PRIORITY_LANGUAGE | Language code for API responses (1 = Hebrew, 2 = British English, 3 = American English) | 3 | | PRIORITY_CACHE_DIR | Directory where metadata cache files are stored | OS temp directory |


Available Tools

Once connected, Claude can use the following tools. The recommended workflow is: search_forms → get_form_fields → query_records or mutate_record.

Discovery

| Tool | Description | Read/Write | | ----------------- | ----------------------------------------------------------------------------------------------- | ---------- | | search_forms | Search for Priority forms by natural language word(s). Returns matching form IDs and names. | Read-only | | get_form_fields | Get field definitions (name, type, max length) and available subforms for one or more form IDs. | Read-only |

Querying

| Tool | Description | Read/Write | | --------------- | --------------------------------------------------------------------------------------------------------------------- | ---------- | | query_records | Read records from any Priority form. Supports filtering, pagination, sorting, field selection, and subform expansion. | Read-only |

query_records filtering operators:

| Operator | Meaning | Example value | | ----------- | ------------------------------------ | ----------------------------- | | eq | Equals (also supports wildcards) | "ACME", "T*", "*smith*" | | ne | Not equals | "CLOSED" | | gt / ge | Greater than / greater than or equal | 100 | | lt / le | Less than / less than or equal | 1000 |

Multiple conditions can be combined with and / or logic.

Mutating

| Tool | Description | Read/Write | | --------------- | ------------------------------------------------------------------------------------------------------------ | ---------- | | mutate_record | Create (POST), update (PATCH), or delete (DELETE) any record. Provide the HTTP method, path, and data. | Write |

Files

| Tool | Description | Read/Write | | ------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------- | | upload_file | Attach a local file to an existing Priority record. Provide an absolute file path — the server reads, encodes, and uploads it for you. | Write |

Metadata

| Tool | Description | Read/Write | | ------------------ | ---------------------------------------------------------------------------------------------------- | ---------- | | refresh_metadata | Force a schema reload from Priority. Use after a Priority upgrade or if new forms are not appearing. | Read-only |


Example Prompts

Once the server is connected, try these in Claude:

Show me all open orders for customer ACME.
Find the customer form and show me the fields available on it.
Create a new customer with name "Globex Corp" and phone "+1-555-0100".
List the last 10 purchase orders, sorted by date descending.
Update order SO-1234 to set the status to Confirmed.
Attach the file /Users/me/Documents/invoice.pdf to order SO-1234.
Refresh the metadata — I just added new forms in Priority.

Addressing Records: the from Path

All tools that read or write data use a from path to address a record or collection. You don't need to construct this manually — Claude builds it for you — but understanding the structure helps when writing prompts.

[{ "form": "ORDERS" }, { "key": { "ORDNAME": "SO001" } }, { "form": "ORDERITEMS_SUBFORM" }]
  • Start with a { "form": "..." } entry for the top-level form.
  • Add a { "key": { ... } } entry to target a specific record.
  • Add another { "form": "..." } entry to navigate into a subform.
  • Omit the key entry to address the whole collection (e.g. for creating a record or listing all).

Development

To run or modify the server locally:

# Clone the repository
git clone https://github.com/idand-boost/priority-mcp-server.git
cd priority-mcp-server

# Install dependencies
npm install

# Copy the environment template and fill in your credentials
cp .env.template .env

# Run in development mode (auto-reloads on change)
npm run dev

# Build
npm run build

# Run tests
npm test

# Type-check without building
npm run typecheck

To connect the local build to Claude Desktop, change the command in your claude_desktop_config.json to point at the compiled output:

{
  "mcpServers": {
    "priority": {
      "command": "node",
      "args": ["/absolute/path/to/priority-mcp-server/dist/bin/cli.js"],
      "env": { "...": "..." }
    }
  }
}

Inspecting tool calls

Use the MCP Inspector to test tools interactively without Claude Desktop:

npm run dev:inspect

Troubleshooting

The Priority server does not appear in Claude Desktop Fully quit and reopen Claude Desktop after editing claude_desktop_config.json. A partial restart is not enough.

Metadata loading takes a long time on first connect On large Priority installations, fetching the full schema can take 30–60 seconds. Wait for Claude to confirm the server is ready before sending queries. Subsequent connections use the disk cache and are fast.

"Invalid credentials" or auth error on startup Double-check PRIORITY_URL, PRIORITY_USERNAME, and PRIORITY_PASSWORD. For PAT auth, ensure PRIORITY_PASSWORD is the literal string PAT and PRIORITY_USERNAME holds the token value. The server validates credentials immediately on connect — any auth error appears before tools are usable.

npx not found / ENOENT error Ensure Node.js >= 22.14.0 is installed and npx is in your PATH. On macOS you can verify with which npx in Terminal.

Forms or fields added recently are not visible Ask Claude: "Refresh the metadata" — this clears the cache and fetches the latest schema from Priority.

Cache is stale or behaving unexpectedly Delete the cache files manually: they are stored in your OS temp directory (or the path set in PRIORITY_CACHE_DIR) as .json files named by a hash of your Priority instance details.


Contributing

Contributions are welcome. Here is the fastest way to get started:

  1. Fork the repository and create a feature branch.
  2. Run the tests with npm test before making changes to establish a baseline.
  3. Write tests for any new behavior — pure functions (filter builder, path builder) need unit tests; tool behavior can be covered with integration tests against a real or recorded Priority endpoint.
  4. Open a pull request with a clear description of what changed and why.

For significant changes — new tools, transport modes, auth flows — open an issue first so we can agree on the design before you write the code.


License

MIT