@boostmoveo/priority-mcp-server
v1.0.5
Published
MCP server for Priority ERP — query, create, update, and delete records via natural language
Maintainers
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.ininame
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
keyentry 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 typecheckTo 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:inspectTroubleshooting
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:
- Fork the repository and create a feature branch.
- Run the tests with
npm testbefore making changes to establish a baseline. - 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.
- 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
