MCP server

The MCP server exposes WorkZeal data to external AI tools via the Model Context Protocol: the model gets access to the system entities it needs — companies, contacts, deals, tasks, email — and works with them from its own interface.
Connection parameters:
| Parameter | Value |
|---|---|
| Address (endpoint) | https://mcp.workzeal.com/mcp |
| Transport | Streamable HTTP |
| Authorization | Sign-in via browser (OAuth) or the Authorization: Bearer <token> header |
Two ways to authorize
Sign-in via browser (OAuth) is the simplest way: add the server, sign in with your login and password, and you're done. This is how claude.ai, Claude Code, and other clients with OAuth support connect.
Each such connection appears in the token registry (Settings → API) as a separate row "MCP OAuth: application name". Disable the row, and that application's access is revoked immediately.
API token is the universal way for clients without OAuth support. It uses the same token as the public API. How to get it is described in the API quick start section: Settings → API.
Warning
The token gives access to the data in your WorkZeal account. Do not publish it or share it with third parties. If the token is compromised, disable it in the token registry (Settings → API), and all traffic using it will be stopped.
Connecting
No token needed — you connect by signing in to your account:
- Open Settings → Connectors → Add custom connector.
- Enter the address
https://mcp.workzeal.com/mcp. - Click Connect. The WorkZeal sign-in page opens. Sign in with your login and password.
After signing in, the WorkZeal tools appear in the chat. You can revoke access at any time: remove the connector in claude.ai or disable the "MCP OAuth: Claude" row in the registry (Settings → API).
No token needed — on the first request, a browser opens with the WorkZeal sign-in page:
claude mcp add --transport http workzeal https://mcp.workzeal.com/mcp
The tools appear in a new Claude Code session. You can check the connection and complete authorization with the /mcp command inside the session.
By default, the server is added only for the current project. To make it available in all projects, add the --scope user flag.
Token option (if signing in via browser is not suitable, for example on a server):
claude mcp add --transport http workzeal https://mcp.workzeal.com/mcp \
--header "Authorization: Bearer <token>"
Save the token to an environment variable and add the server to the ~/.codex/config.toml configuration file:
export WORKZEAL_MCP_TOKEN="<token>"
[mcp_servers.workzeal]
url = "https://mcp.workzeal.com/mcp"
bearer_token_env_var = "WORKZEAL_MCP_TOKEN"
enabled = true
Or with a CLI command:
codex mcp add workzeal --url https://mcp.workzeal.com/mcp
Then restart Codex. The server will appear in the codex mcp list output.
Open Settings → MCP → Add new MCP Server or create a .cursor/mcp.json file in the project root (for all projects, ~/.cursor/mcp.json):
{
"mcpServers": {
"workzeal": {
"url": "https://mcp.workzeal.com/mcp",
"headers": {
"Authorization": "Bearer <token>"
}
}
}
}
After saving, the server appears in the Settings → MCP list. The toggle should turn green.
In recent versions of Cursor, you can omit headers. In that case, the WorkZeal sign-in page (OAuth) opens when connecting.
Create a .vscode/mcp.json file in the workspace folder:
{
"servers": {
"workzeal": {
"type": "http",
"url": "https://mcp.workzeal.com/mcp",
"headers": {
"Authorization": "Bearer <token>"
}
}
}
}
Then start the server from the MCP panel (the MCP: List Servers command in the command palette).
In recent versions of VS Code, you can omit headers. In that case, the WorkZeal sign-in page (OAuth) opens when the server starts.
Any MCP client that supports the Streamable HTTP transport will work. If the client supports MCP OAuth authorization, just enter the address https://mcp.workzeal.com/mcp, and sign-in will go through the browser. Otherwise, specify in the settings:
- URL:
https://mcp.workzeal.com/mcp - Header:
Authorization: Bearer <token>
Example of a direct call to check the connection:
curl -X POST https://mcp.workzeal.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer <token>" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'
The response contains information about the server and its instructions, which means the connection works. Subsequent requests (for example, tools/list) are sent with the Mcp-Session-Id header taken from the headers of this response. MCP clients do this automatically.
For platforms that do not yet support Streamable HTTP (for example, Yandex AI Studio agents), specify the legacy HTTP+SSE transport address instead: https://mcp.workzeal.com/mcp/sse, with the same authorization header.
Available tools
| Tool | What it does |
|---|---|
list_records |
Universal paginated list of records from any module: companies, tasks, documents, finance, sales, deals, products, email, activity log — across all companies at once, with filters by dates, responsible persons, and tags |
list_users |
List of active users (managers) |
get_directory |
Directory values by its ID: company types, deal statuses, categories |
list_custom_filters |
Custom filters of a module |
list_additional_fields |
Custom fields of a module |
insert_company |
Creates a company or an individual, with emails, phones, contact persons, and company details (Tax ID) in one go. It never creates a duplicate: if any email of the company or of its contact persons already belongs to an existing company, it returns that company's ID (code 409) |
update_company |
Partial update of a company card: status, responsible person, note, address |
get_company |
The whole company card: fields, all emails and phones, company details, contact persons |
add_company_requisites |
Adds company details to an existing company: Tax ID and other registration codes, addresses, director, bank |
get_my_day |
The results of a day or a period in one call: companies added, tasks (scheduled, done, overdue), deals, invoices, money in and out, forgotten companies, and the user's KPI. Every value is given for the whole company and for the user personally |
get_my_tasks |
The user's tasks for the day, plus overdue ones |
get_my_kpi |
The user's KPI progress for a period: the overall percent and each plan item with its target, actual value, and percent |
get_team_kpi |
KPI progress of colleagues and departments. Requires permission for the "KPI users" / "KPI departments" reports |
find_company_contacts |
Contacts from the company's own web site: the home page plus its contact, about and requisites pages. Returns the emails published there, each with the page it came from and a confidence level, plus phone numbers and the tax id from the footer. Use it when a card has no email: registry data usually has none or a dead one, while the site's address is live |
list_contacts |
Contact persons with phones and email: by company or by name search |
insert_contact |
Adds a contact person to an existing company |
update_contact |
Partial update of a contact person: position, full name, status, note |
add_company_phone |
Adds a phone number to an existing company or contact person |
add_company_email |
Adds an email to an existing company or contact person |
list_tasks |
Tasks of a single company or deal; all tasks and tasks for a period are available via list_records |
insert_task |
Creates a task: text, assignee, deadlines, reminder |
update_task |
Partial update of a task, including closing it with a result |
insert_deal |
Creates a deal linked to a company |
list_deal_goods |
Line items of a deal |
add_deal_goods |
Adds products from the catalog to a deal |
update_deal_good |
Changes a deal line item: quantity, price, discount |
list_document_goods |
Line items of a document |
add_document_goods |
Adds products from the catalog to a document |
list_documents |
Documents of a single company or deal; for a period and across all companies, use list_records |
insert_document |
Creates a document with an auto-generated number |
update_document |
Partial update of a document: amount, status, number, dates |
list_finance |
Financial transactions of a single company or deal; for a period and across all companies, use list_records |
insert_finance |
Adds an income or expense transaction on an account |
update_finance |
Partial update of a transaction: amount, category, account, note |
update_deal |
Partial update of a deal: changing the stage, amount, responsible person, dates — only the fields passed are changed |
list_goods |
Catalog of products and services: search by name, SKU, section |
insert_good |
Adds a product or service to the catalog |
update_good |
Partial update of a product: price, stock balance, SKU |
list_mail_accounts |
List of the user's email accounts |
send_email |
Sends an email through a configured email account |
report_automation_result |
Writes the outcome of a bulk job to the automation log, only when the user explicitly asks to save the result there |
The set of tools is gradually expanding. A detailed description of the public API methods they rely on is in the API section; the get_my_* and get_team_kpi summaries are described on the Key metrics page.
How to use it
Once connected, a regular natural-language request is enough. The model picks the right tool itself:
- "Find and add 10 new potential clients" — the model will find companies in public sources, ask you for the responsible person and client type, and create cards with phones, email, and contact persons
- "Show the list of clients added yesterday"
- "Find the company with Tax ID 7801234567"
- "Create the company Acme with phone +1 212 555-0123 and email info@acme.com"
- "How many deals does manager Kate have in progress for August?"
- "What money came in today?"
- "Move the Acme deal to the Negotiation stage and set the amount to $250,000"
- "Assign Michael a task to call Acme tomorrow at 3:00 PM with a reminder half an hour before"
- "Record an income of $150,000 from Globex to the checking account under the Sales category"
- "How is my day going?" or "How many deals did we create this week?"
- "What are my tasks today? Do I have any overdue ones?"
- "How was my KPI last month?"
- "Which of my colleagues is doing best on their KPI?"
Frequently asked questions
How to revoke an AI tool's access
All connections, both by token and via browser sign-in, are visible in the token registry (Settings → API). Browser sign-in connections are labeled "MCP OAuth: application name". Disable the row, and access will be stopped: active requests will stop going through, and the application will not be able to renew access.
I connected the server, but the tools did not appear
MCP clients load the list of tools when a session starts. Start a new session (a new chat), and the tools will be picked up automatically.
The client sees an old set of tools
The list of tools is cached for the duration of the connection. If the server has been updated but the new tools are not visible, reconnect the integration or start a new session.
Calls return an authorization error
When signing in via browser: check that the connection is not disabled in the registry (Settings → API, the "MCP OAuth: …" row). If you disabled and re-enabled it, or access has expired, reconnect the integration by signing in to your account again.
When connecting by token: check that the token is active in the registry (Settings → API) and that the header is passed exactly as Authorization: Bearer <token>, with the word Bearer and a space before the token.
Can I give an AI tool limited access?
Access inherits the user's rights: for a token, the rights of the user who created it; for browser sign-in, the rights of the user who signed in. To limit what the model can do, connect as a user with a suitable role and access rights.