@vitrion/zentria-mcp
Zentria MCP server — full Zentria public team API coverage for AI assistants via the Model Context Protocol.
Published as @vitrion/zentria-mcp.
This server uses the official public REST API at /api/public. Paths and request bodies match the OpenAPI docs; they are not invented.
Features
- 309 tools covering nearly everything the Zentria app does: discovery, to-dos, sales, customers, campaigns and connections, invoices, CRM leads, submissions, calls and lead values, Speed to Lead, Google Business Profiles, webhooks, members, team settings and exports. The hosted connector only lists the tools that fit the scopes of the token
- Team-bound Personal Access Token auth (
Authorization: Bearer) - Automatic rate-limit retry (429 +
Retry-After) - Stdio transport (Cursor, Claude Desktop, Claude Code)
- Hosted Streamable HTTP mode with OAuth, used for the Claude custom connector at
https://app.zentria.nl/mcp - Logs only to stderr (stdio-safe)
Requirements
- Node.js >= 20
- A Zentria team API key (Teams → API keys) with the scopes you need
Environment variables
The client also sends Accept: application/json and User-Agent: @vitrion/zentria-mcp/<version>. The API key is never written to logs.
Install
npx -y @vitrion/zentria-mcp
Cursor
Add to your user config (~/.cursor/mcp.json) or project config (.cursor/mcp.json):
{
"mcpServers": {
"zentria": {
"command": "npx",
"args": ["-y", "@vitrion/zentria-mcp"],
"env": {
"ZENTRIA_API_KEY": "<team-pat>",
"ZENTRIA_BASE_URL": "https://app.zentria.nl"
}
}
}
}
Claude Desktop
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Use the same mcpServers block as Cursor.
Claude Code
claude mcp add zentria -- npx -y @vitrion/zentria-mcp
Set ZENTRIA_API_KEY in your shell environment or MCP host config.
Claude custom connector (hosted)
Zentria hosts this server at https://app.zentria.nl/mcp. In Claude (web, Desktop, mobile) choose Settings → Connectors → Add custom connector, enter that URL and sign in with your Zentria account. On the consent screen you pick the team and the scopes. No API key is needed.
Running the HTTP mode
ZENTRIA_MCP_TRANSPORT=http node dist/index.js
# or
node dist/index.js --http
How it works:
- The server is a pure OAuth resource server. Zentria (Laravel Passport) is the authorization server and publishes
/.well-known/oauth-protected-resource/mcp,/.well-known/oauth-authorization-serverand dynamic client registration at/oauth/register. - Requests without a valid bearer token get
401withWWW-Authenticate: Bearer resource_metadata="…", which starts the client's sign-in. - Tokens are verified with
GET /api/public/me(cached for 30 seconds) and forwarded unchanged to the public API. Team API keys work as bearer tokens too. - Each request runs on a fresh stateless server instance.
GET /healthzanswers{"ok":true}.
Run it behind a TLS proxy that forwards the MCP path unchanged, for example nginx:
location = /mcp {
proxy_pass http://127.0.0.1:3333;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_read_timeout 300s;
}
For AI agents
- Call
get-mefirst to learn the bound team, enabled modules, and token scopes. - API keys are bound to one team — you cannot switch teams with headers.
- Use the narrowest scopes when minting keys (
sales:read,sales:write, etc.). - Public API docs:
/api/public/docs - PAT writes can emit webhooks — avoid update loops on the same event.
Tool groups
338 tools. They cover what you can do in the Zentria app, limited by the rights of the member behind the key and by the scopes of the key. In the hosted connector (HTTP mode) only the tools that fit the scopes of the token are listed, so a read-only connection sees about 110 tools.
Development
git clone https://github.com/vitrionbv/zentria-mcp.git
cd zentria-mcp
npm install
npm run build
npm test
npm run dev
Inspector
npm run build
npm run inspector
Publishing
Releases go to npm with trusted publishing (OIDC). Push a v* tag to run .github/workflows/npm-publish.yml. The workflow uses id-token: write and does not use NODE_AUTH_TOKEN.
Configure the trusted publisher on npm: GitHub org vitrionbv, repo zentria-mcp, workflow npm-publish.yml.
License
MIT — see LICENSE.