eva-custom-mcp
You can only access EvaTeam's public glossary with this server configuration.
Fetch a glossary article by slug or URL (e.g.,
apiorhttps://www.evateam.ru/glossary/api/).Search for a glossary term (e.g.,
API) and retrieve matching article content.
Click on "Deploy 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., "@eva-custom-mcpsearch for glossary term 'API'"
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.
eva-custom-mcp
MCP server that connects AI assistants (Claude Desktop, Claude Code, Codex, Cursor, and other MCP clients) to EvaTeam: search and edit tasks, work with wiki documents, and read the public EvaTeam glossary.
Requirements
Node.js 18 or newer (check with
node -v).npxcomes with Node.js.For project, task, and wiki tools: your EvaTeam address (for example
https://yourcompany.evateam.ru) and an API token.
Without a token the server still starts, but only the glossary tools are available.
Getting an API token
In EvaTeam, open your personal profile card, go to the Security section, and generate an API token. The token has the same permissions as your account, so keep it private.
Related MCP server: WikiJS MCP Server
Installation
You don't need to download or build anything: the MCP client starts the server from npm with npx.
Add it to your client using one of the options below, then restart the client.
Claude Desktop
Open Settings → Developer → Edit Config, or edit the file directly:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"eva": {
"command": "npx",
"args": ["-y", "eva-custom-mcp"],
"env": {
"EVA_BASE_URL": "https://yourcompany.evateam.ru",
"EVA_API_TOKEN": "your-token"
}
}
}
}If the file already has other servers, add "eva": { ... } inside the existing mcpServers object.
On Windows, if the server fails to start with npx not found, use "command": "cmd" and
"args": ["/c", "npx", "-y", "eva-custom-mcp"].
Claude Code
claude mcp add --transport stdio --scope user \
--env EVA_BASE_URL=https://yourcompany.evateam.ru \
--env EVA_API_TOKEN=your-token \
eva -- npx -y eva-custom-mcpCheck the connection with claude mcp list or /mcp inside Claude Code.
Codex
codex mcp add eva \
--env EVA_BASE_URL=https://yourcompany.evateam.ru \
--env EVA_API_TOKEN=your-token \
-- npx -y eva-custom-mcpOr add it by hand to ~/.codex/config.toml:
[mcp_servers.eva]
command = "npx"
args = ["-y", "eva-custom-mcp"]
startup_timeout_sec = 30
[mcp_servers.eva.env]
EVA_BASE_URL = "https://yourcompany.evateam.ru"
EVA_API_TOKEN = "your-token"startup_timeout_sec is optional. It gives the first npx run time to download the package, which can
otherwise exceed the default startup timeout. Check the connection with codex mcp list or /mcp inside Codex.
Cursor and other MCP clients
Use the same JSON as for Claude Desktop. In Cursor it goes into ~/.cursor/mcp.json
(all projects) or .cursor/mcp.json (one project).
Global install (optional)
If you prefer not to use npx:
npm install -g eva-custom-mcpThen use "command": "eva-custom-mcp" with no args in the client config.
Updating
npx can keep using a cached copy. To always start the newest version, use
"args": ["-y", "eva-custom-mcp@latest"], or pin a version such as eva-custom-mcp@0.1.3.
With a global install, run npm install -g eva-custom-mcp@latest.
Configuration
All settings are environment variables, passed through the env block of the client config.
Variable | Required | Description |
| For EvaTeam tools | Your EvaTeam address, for example |
| For EvaTeam tools | API token. Enables project, task, and document tools. |
| For | EvaTeam login of the default user. Other tools work without it; token ownership is not verified. |
| No | Absolute path to a folder. Enables |
| No | Site for the glossary tools. Defaults to |
Checking that it works
After restarting the client, ask the assistant something like "Show my EvaTeam projects".
It should call project_list.
To test the server without an AI client, use the MCP Inspector:
npx @modelcontextprotocol/inspector \
-e EVA_BASE_URL=https://yourcompany.evateam.ru -e EVA_API_TOKEN=your-token \
npx -y eva-custom-mcpTroubleshooting
Only
glossary_*tools are listed:EVA_API_TOKENis not set or not passed to the server. Check theenvblock and restart the client.401/403errors: the token is wrong, expired, or belongs to another EvaTeam instance. CheckEVA_BASE_URL.Server does not start: check that
node -vis 18 or newer, and thatnpxworks in a terminal.document_attachment_uploadis missing: setEVA_UPLOAD_ROOT. Uploads are limited to that folder.
Tools
Glossary tools:
glossary_article_get: fetch a glossary article by slug or URL, for exampleapi.glossary_search: resolve a glossary term to an article.
Glossary tools are always available. The project, task, and document tools below appear only when
EVA_API_TOKEN is set.
Project/search tools:
project_list: list projects.project_get_by_code: resolve a project by code.project_find_everything: search tasks and wiki documents in one project.
Task tools:
task_search: search tasks, optionally scoped by project.task_get: get a task by code or object reference.task_create: create a task.task_update: update a task.task_transition: change task status.task_comment_add: add a task comment.task_comments_list: list task comments.task_assign: assign a task to a person by login or name; can also set "waiting for answer" and change status.task_link_create: create a relation between two tasks.task_time_log: log spent time.task_create_from_template: create a task from a template.
task_create, task_update, and task_assign accept people as a login, a unique part of a name, or a
CmfPerson:<uuid> reference. task_create and task_update can also set the reporter (owner), and
task_create can put the task into a sprint (sprintCode).
People tools:
person_search: find users by part of a name or login.person_get: get one user by login, unique part of a name, or reference.whoami: the user configured byEVA_USER_LOGIN, which need not be the token owner.my_tasks: open tasks assigned to, reported by, or waiting for the configured user; also works for an explicitpersonwithoutEVA_USER_LOGIN. ReturnshasMorewhen more tasks exist beyondlimit.
Release tools:
release_list: list releases, optionally by project and name (or sprints withcodePrefix: "SPR-").release_tasks: tasks in a release with an exact count per status type.task_add_release: add a release to a task; releases already set on the task are kept.
Document tools:
document_search: search wiki documents by title.document_get: get a document by code or object reference.document_create: create a document.document_update_text: update document draft/title/metadata.document_publish: publish a document draft.document_rename: rename a document.document_children_list: list child documents.document_tree: list project documents as a flat tree source.document_attachments_list: list attachment metadata.document_attachment_download: request/download all document attachments.document_attachment_upload: create attachment metadata and upload a file with multipart POST. Available only whenEVA_UPLOAD_ROOTis set; files outside that directory (including via symlinks) are rejected.
Recommended Agent Prompts
Short Prompt
Use EVA MCP as the source of truth for project tasks and wiki documents.
Prefer compact high-level tools: `project_find_everything`, `task_search`, `task_get`, `task_create`, `task_update`, `task_comment_add`, `task_time_log`, `document_search`, `document_get`, `document_create`, `document_update_text`, `document_publish`.
Always resolve project codes with `project_get_by_code`.
Before mutating an object, fetch it first and summarize the intended change.
Never delete or publish without explicit user confirmation.
Return EVA object codes in user-facing responses.Full Prompt
You work with EvaTeam through the `eva-custom-mcp` MCP server.
Main rules:
- Always start with `project_get_by_code` when the user provides a project code.
- Use `project_find_everything` for broad project searches.
- For tasks:
- use `task_search` to find tasks;
- use `task_get` when a task code is known;
- use `task_create` to create tasks;
- use `task_update` to change task fields, status, or assignee;
- use `task_comment_add` to add comments;
- use `task_time_log` to log spent time.
- For wiki documents:
- use `document_search` to find pages/documents;
- use `document_get` when a document code is known;
- use `document_create` to create a document;
- use `document_update_text` to change content;
- use `document_publish` to publish changes.
- Do not delete tasks or documents without explicit user confirmation.
- Do not publish documents without explicit user confirmation.
- Before changing a task or document, fetch the current object first with `task_get` or `document_get`.
- If the API returns multiple similar results, ask the user which object is intended.
- In user-facing responses, include EVA object codes such as `ABC-000123` for tasks and `DOC-000123` for documents.
- Never reveal API tokens and do not ask the user to paste tokens into chat.
Typical workflows:
1. "Find everything about X in project PRJ"
- call `project_get_by_code`
- call `project_find_everything`
- summarize results grouped into tasks and documents
2. "Create a task in project PRJ"
- call `project_get_by_code`
- ask for missing title/description if needed
- call `task_create`
- return the created task code
3. "Update a wiki page"
- find the page with `document_search` or `document_get`
- summarize the intended change
- after confirmation, call `document_update_text`
- if publishing is needed, ask for separate confirmation before `document_publish`
4. "Add a comment to a task"
- call `task_get`
- call `task_comment_add`
- confirm that the comment was addedDevelopment
git clone https://github.com/ivan1911/eva-custom-mcp.git
cd eva-custom-mcp
npm install
npm run buildTo run a local build from an MCP client, point it at the compiled entry point:
{
"mcpServers": {
"eva": {
"command": "node",
"args": ["/absolute/path/to/eva-custom-mcp/dist/index.js"],
"env": {
"EVA_BASE_URL": "https://yourcompany.evateam.ru",
"EVA_API_TOKEN": "your-token"
}
}
}
}Other commands: npm run dev (watch mode), npm run typecheck, make publish-dry-run, and make publish
(needs NODE_AUTH_TOKEN).
The server calls EvaTeam JSON-RPC methods; API notes and the OpenAPI spec are in docs/eva_api.
Available Tools
2 toolsglossary_article_getB
Get a public EvaTeam glossary article by slug or URL
| Name | Required | Description | Default |
|---|---|---|---|
| slugOrUrl | Yes | EvaTeam glossary slug or article URL, e.g. api or https://www.evateam.ru/glossary/api/ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses the resource is 'public' (an access level), but does not describe return format, error behavior for invalid slugs/URLs, or content structure. For a read tool with no annotations, this is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, clear sentence that is appropriately concise with zero wasted words. It reads naturally and front-loads the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 param, 100% schema coverage, read-only nature), so the description covers the essentials. It could mention what fields the returned article contains or behavior when both slug and URL forms are given, but for a straightforward single-entity GET tool with strong schema coverage, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description reinforces the parameter by naming both acceptable forms ('by slug or URL'). The example in the schema additionally illustrates valid values. The description adds marginal value but the schema already handles parameter meaning well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses specific verb (Get) + resource (EvaTeam glossary article) and states the input modality (by slug or URL). It is clear about purpose. However, it does not explicitly distinguish itself from the sibling glossary_search tool beyond the read-specific framing, though 'get' vs 'search' implies retrieval-by-identifier vs lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance on when to use this tool. The contrast with the sibling glossary_search is only implicit (get by exact slug/URL vs search). There is no explicit when/when-not guidance or alternative naming, though the 'by slug or URL' phrasing implies usage when you know the identifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
glossary_searchC
Resolve an EvaTeam glossary term and return matching article content
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Glossary term to resolve, e.g. API |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state return format, whether it performs a fuzzy match or exact match, what 'resolve' means (normalization, synonym expansion, etc.), or behaviors on no-match/multiple-match scenarios. The agent is left blind to critical behavioral characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with zero waste. It is appropriately brief for a one-parameter tool, though it could have used the brevity to add behavioral specifics without harm.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists and no annotations are provided, so the description must carry the completeness burden. For a simple single-parameter tool, it covers the basic purpose but fails to disclose match behavior, return shape, or relationship to the sibling tool. A resolution-style tool with no output specification leaves the agent unsure what it will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the query parameter has a clear description with an example ('API'). The description's use of 'Resolve' hints that the query may undergo normalization beyond exact match, adding marginal value, but the parameter is already well-documented by the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Resolve) and resource (EvaTeam glossary term) with a clear outcome (return matching article content). It distinguishes from the sibling tool glossary_article_get in that this appears to resolve/search a term rather than fetch a specific article, but this differentiation is implicit rather than explicit, muddying what 'Resolve' actually means operationally.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus glossary_article_get. The description does not clarify whether this is for exploring/resolving unknown terms while the sibling is for retrieving a known article, leaving the agent to infer the distinction from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.1- First observed
glossary_article_get - First observed
glossary_search
TDQS
Scored across 2 tools
The two tools have overlapping purposes—both retrieve a glossary article's content, differing mainly in lookup mechanism (by slug/URL vs. term resolution). An agent could easily be unsure which to pick for a given query, since both ultimately return article content.
Both tools follow a consistent verb_noun pattern (glossary_article_get, glossary_search), sharing the 'glossary' prefix. The verbs 'get' and 'search' differ slightly in style but remain predictable and readable.
At only 2 tools, the surface is thin for a server dedicated to a glossary domain. It's borderline—enough for basic read access but minimal for any meaningful workflow beyond retrieval.
The surface only supports reading/searching glossary articles. There is no create, update, or delete capability, and no listing endpoint. It's a read-only retrieval server with noticeable gaps relative to typical content management expectations.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for generating rough-draft project plans from natural-language prompts.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server for Wiki.js projects that enables full-text search, page retrieval, and page management capabilities. It allows LLMs to interact with wiki content through specialized tools for searching, listing, and creating pages.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables full management of WikiJS instances, supporting operations like page creation, searching, and updating. It also provides tools for knowledge graph exploration, content summarization, and retrieval of wiki statistics.7 npmMIT
- FlicenseBqualityCmaintenanceMCP server for integrating KiraHub with Claude Code. Provides tools for task management, epic management, working notes, project knowledge, and plan wiki integration.28-
- AlicenseNot gradedqualityCmaintenanceMCP server for Wiki.js integration, enabling AI assistants to create, read, update, delete, search, and move wiki pages via natural language.1MIT