PriorityMCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PriorityMCPFind the screen for open customer invoices and list the 10 largest by amount."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PriorityMCP
An MCP server over a live Priority ERP installation. It gives an LLM the tools to find the right screen, learn what its columns mean, and query it — rather than a hard-coded method per business question.
Ten tools over Priority's OData v4 API, plus a second channel through
priority-web-sdk for running Priority programs. Serves both transports: stdio for a
local client, and Streamable HTTP over TLS so clients on other machines can connect.
Why discovery rather than a method per domain
The first version of this server had one curated tool, get_sales, built on a
hand-coded map of four invoice screens. Building that map required guessing what each
screen meant, and one of the guesses was wrong: CINVOICES was coded as "credit
invoices" and its amounts multiplied by -1.
EFORM.TITLE on the server says חשבוניות מרכזות — consolidated invoices. Credit
invoices are a different screen entirely (SALECREDITINVOICES, table CUSTSALES),
and on that installation it is not exposed to the API at all. Every total produced
from that mapping was wrong, and nothing in the output looked wrong. The database had
held the correct answer the whole time, in a table nobody had queried.
So the design rule here is: the model asks Priority what things are. Screen names
are opaque English codes whose meaning lives in a Hebrew title, and inferring one from
the other is exactly the mistake to prevent. get_sales still exists but is hidden by
default (PRIORITY_ENABLE_GET_SALES=1 to expose it) — when it is available the model
reaches for it and never exercises discovery.
Related MCP server: MCP Server for Odoo
Quick start
Requires Node 20+. There is no build step: tsx runs the TypeScript directly, so
the code in src/ is the code that runs.
npm install
copy .env.example .env # then fill it in -- every field is documented in place
npm run probe # verifies the connection and what Priority exposes
npm run server # stdio, for a local MCP clientTo serve other machines:
powershell -ExecutionPolicy Bypass -File scripts/make-cert.ps1 # prints the two .env lines
npm run server:http # HTTPS on :3401
powershell -File scripts/client-kit.ps1 # a folder to hand to each clientAs a Windows service (WinSW), so it survives logout and reboot:
.\service\install-service.ps1 # as AdministratorThe service runs src/http.ts from this directory, so deploying a change is
Restart-Service PriorityMCP — no reinstall. Reinstall only when
service/priority-mcp.xml itself changes. Run npm run typecheck before restarting:
the service retries three times on failure and then stays down, so one syntax error is
an outage.
The tools
Tool | What it is for |
| Find a screen from a business concept, in Hebrew or English. Searches an in-memory dictionary; start here. |
| Columns with Hebrew titles, keys, types, sub-forms, screen help, and which table each column reads from. |
| Priority's own help for a screen, report, procedure, interface or menu — or for one column. The way to learn what a program DOES before running it. A permission refusal is reported as such, never as "no help". |
| Read rows. |
| Totals, counts and "per X". Computed server-side here, by paging — see the |
| The distinct values a code column actually holds, with counts. Use before filtering on one. |
| The configured companies with their real names from the |
| Switch the session's company. Changes the data only. |
| Where the glossary, examples and dictionary have gaps. |
| The catalog of runnable programs ( |
| Run one to completion, through the Web SDK. Stops with |
| The same programs as an interactive session: |
| AI skills written inside Priority ( |
Clients also receive ~3,100 characters of server-level instructions on initialize
(the discovery order, case sensitivity, never summing currencies, how reversals work).
You do not need to write a system prompt for this.
What was measured about this Priority server
These are findings from the live installation, not documentation. Each one shapes the code, and several are silent failures — the reason the tools do not simply forward OData:
Behaviour | Consequence |
| Paging uses |
|
|
| Counts come from paging, not from asking. |
No | Paging is driven by |
| Filters use chained |
A |
|
| The parent |
URL length limits at roughly 50 | Filters are chunked. |
The service document takes ~70 s | Metadata calls get their own 180 s budget, separate from the 45 s query budget. |
Screen and column names are case-sensitive, and ten pairs differ only by case ( | Names are never case-folded, anywhere. |
| A negative result from an |
| Screen help and column help are permitted separately in Priority. |
| It is the source for searching programs, since |
| Skills exist as a feature; reading them needs the screen opened for the API or the API user given the "תחזוקת מערכת" module. |
The Web SDK's endpoint |
|
|
|
The dictionary comes from EFORM (~5,800 forms) and is cached on disk for 24 hours,
keyed per installation and shared across companies — screen definitions live at the
tabula.ini level, so every company on one installation has the same dictionary.
Configuration
Everything is in .env, and every setting is documented where it is defined —
see .env.example. The three that decide the shape of a deployment:
PRIORITY_ODATA_URL+PRIORITY_ENVIRONMENTS— end the URL at thetabula.iniand list companies to let callers choose one; end it with a company name for a single-company server. The list is an allowlist, not a hint: the name goes into a URL path, so anything unlisted is refused.PRIORITY_AUTH_MODE—shared(one identity from.env),headers(each caller supplies its own), orelicit(the client asks its user). Header and elicited credentials never enter the model's context, which is why there is nologin()tool.PRIORITY_READ_ONLY—1removesrun_program, leaving no way to change anything. Discovery and read tools are never gated: without them a model cannot learn a screen name and goes back to inferring one, which is the failure above.
MCP_AUTH_TOKEN is required whenever the listener is not loopback-only. The server
refuses to start without it rather than warning — it holds Priority credentials and
every tool reads live ERP data.
Connecting a client
{
"mcpServers": {
"priority": {
"type": "http",
"url": "https://<server>:3401/mcp",
"headers": {
"X-Priority-User": "...",
"X-Priority-Pass": "...",
"X-Priority-Company": "demo"
}
}
}
}Or Authorization: Bearer <MCP_AUTH_TOKEN> to use the server's own identity. Header
credentials require TLS and are refused over plain HTTP. scripts/client-kit.ps1
packages the CA and these templates into a folder to hand to each client machine.
On Windows, verifying with curl needs --ssl-revoke-best-effort: curl there uses
schannel, which requires a revocation source, and a private CA publishes no CRL. The
flag relaxes the revocation check only. Node-based clients do not need it.
Tests
npm run typecheck
npm test # 8 offline suites -- no server, no Priority
npm run test:live # 11 suites against the real installation
npx tsx tests/live.http.ts # the HTTP transport, as a remote client
npx tsx tests/live.headerauth.ts # all four accepted and four refused auth pathsLive tests need NODE_EXTRA_CA_CERTS=<repo>\certs\mcp-ca.pem when TLS is on.
A live suite that cannot reach a resource skips with a stated reason rather than passing quietly — a Priority permission that is closed must not read as a green test.
Layout
src/
server.ts tool registration, the model-facing instructions
http.ts Streamable HTTP transport, TLS, sessions, authentication
odata.ts the Priority OData client, EDMX parsing, the quirks above
dictionary.ts the EFORM screen dictionary, cache, Hebrew search
discovery.ts search_screens / describe_screen / query / column sources
aggregate.ts grouping and totals, computed here
companies.ts per-company context over one shared dictionary
auth.ts shared / headers / elicit
help.ts screen help from EXEC/FORMHELP, HTML and {XXXX.T} references
programs.ts the priority-web-sdk channel
service/ WinSW wrapper, install / uninstall
scripts/ make-cert.ps1, client-kit.ps1
tests/ *.test.ts offline, live.*.ts against the installationnode_modules is not in git (336 MB); package-lock.json is, so npm install
restores what this was verified against. certs/, .env and
service/priority-mcp.exe are also excluded — the repo alone does not reinstall the
service.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Agent-complete, permission-scoped product operations for Priorify workspaces.
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
List datasets, schemas, run APL queries, and use prompts for exploration, anomalies, and monitoring.
Give AI agents 30,000+ safe, token-optimized actions across Workday, SAP, Oracle + hundreds more.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Odoo ERP systems through natural language to search records, create entries, update data, and manage business operations. Supports secure authentication and configurable access controls for production environments.
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business records like customers, products, and invoices across any Odoo instance.1Mozilla Public 2.0
- AlicenseAqualityCmaintenanceEnables AI agents to interact with Odoo ERP as the authenticated user, with tools for discovery, planning, and mutations bounded by user permissions.34672MIT
- FlicenseAqualityCmaintenanceEnables interaction with SAP S/4HANA systems via OData, allowing service discovery, metadata exploration, field value retrieval, and CRUD operations through natural language.45
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/YaronMedatech/PriorityMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server