yandex-workspace-mcp
This server lets AI agents securely search, read, and manage Yandex Disk and Yandex Wiki resources through MCP tools.
Unified search: Query Disk and Wiki together with a single
searchtool and paginated cursors.Fetch resource: Retrieve a canonical resource by ID with metadata and optional text.
Yandex Disk operations: List folder contents, get file/folder metadata, and read text content from files.
Yandex Wiki operations: Search wiki pages, get page details by slug, and retrieve page trees.
Expanded tooling: 22 Disk tools and 27 Wiki tools for listing, reading, searching, uploading, mutating, deleting, and managing resources when enabled.
Safety controls: Read-only by default, granular permissions, path allowlisting (
ALLOWED_ROOTS), and audit logging for destructive actions.
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., "@yandex-workspace-mcpSearch my Yandex workspace for 'project meeting minutes'"
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.
Yandex Workspace MCP
A Model Context Protocol (MCP) server with explicit permission controls for integrating AI agents with Yandex Disk and Yandex Wiki.
This server provides a unified interface for AI assistants to search, read, and intelligently update data in Yandex Disk and Yandex Wiki, without resorting to scraping or undocumented APIs.
Start here
Review the engineering: run the credential-free permission demo and inspect permission regression tests.
Connect a client: follow the minimal read-only quick start, then the client configuration below.
Deploy: read authentication, deployment, and security.
The offline example uses a mocked upstream client. It demonstrates local authorization behavior; it does not validate Yandex availability, live API parity, load capacity, or a particular deployment. The opt-in contract sweep below checks a different, live integration boundary.
Related MCP server: Skills MCP AD
Features
Yandex Disk Integration: 22 parity tools plus
disk_readand inlinedisk_uploadcover capacity, list/recent/search, metadata, signed links, uploads, mutations, public resources, Trash, and bounded local jobs.Yandex Wiki Integration: 27 typed tools plus the
wiki_get_treecompatibility alias cover search, page reads/writes, comments, resources, recovery, attachments, and dynamic tables.Unified Workspace Search: A single
searchtool allows agents to query both Disk and Wiki simultaneously.Security-First Architecture:
Read-only by default.
Granular permissions for read, write, and delete operations.
Path allowlisting (
ALLOWED_ROOTS) to strictly confine AI operations.Detailed, structured audit logging of all write/destructive operations.
Installation
git clone https://github.com/denis-samatov/yandex-workspace-mcp.git
cd yandex-workspace-mcp
uv syncConfiguration
Copy .env.example to .env and fill in the values:
# OAuth token generated from Yandex OAuth portal
YANDEX_OAUTH_TOKEN=your_oauth_token
# Your Organization ID (required if Wiki is enabled and you are under an org)
YANDEX_WIKI_ORG_ID=your_org_id
# Toggle services
YANDEX_DISK_ENABLED=true
YANDEX_WIKI_ENABLED=true
# Transport (stdio or streamable-http)
MCP_TRANSPORT=stdio
# For streamable-http
# MCP_TRANSPORT=streamable-http
# MCP_HOST=127.0.0.1
# MCP_PORT=8000
# MCP_AUTH_TOKEN=your_secure_bearer_token # Required for auth on streamable endpoints
# MCP_AUTH_MODE=static
# MCP_STATIC_SCOPES=workspace:read
# MCP_ISSUER_URL=http://localhost:8000
# MCP_RESOURCE_SERVER_URL=http://localhost:8000
# Required for restart-stable cursors in remote mode. Comma-separated
# base64url secrets, each decoding to at least 32 bytes; first signs, all verify.
# MCP_CURSOR_KEYS=base64url-current-key,base64url-previous-key
# Exact public values; wildcards are rejected.
# MCP_ALLOWED_HOSTS=mcp.example.com
# MCP_ALLOWED_ORIGINS=https://app.example.com
# Disk Permissions
DISK_READ=true
DISK_WRITE=false
DISK_DELETE=false
DISK_ALLOWED_ROOTS=/Work,/Research
# Trusted stdio only. Enables local upload plus background job tools.
DISK_UPLOAD_ALLOWED_DIRS=/Users/me/disk-uploads
# Maximum descriptor-based/inline upload size in bytes (default: 104857600).
DISK_MAX_UPLOAD_BYTES=104857600
# Enables server-side URL import only for these exact HTTPS hosts.
DISK_UPLOAD_URL_ALLOWED_HOSTS=downloads.example.com
# Enables public-resource lookup only for these exact keys or normalized URLs.
DISK_ALLOWED_PUBLIC_KEYS=public-key,https://disk.yandex.ru/d/example
# Enables disk_empty_trash only together with DISK_DELETE=true and root `/`.
DISK_ALLOW_GLOBAL_DESTRUCTIVE=false
# Bounded in-process trusted-local job store.
DISK_UPLOAD_JOB_CAPACITY=100
DISK_UPLOAD_JOB_TTL_SECONDS=3600
# Wiki Permissions
WIKI_READ=true
WIKI_WRITE=false
WIKI_DELETE=false
WIKI_ALLOWED_ROOTS=projects,research
# Trusted stdio only: comma-separated local roots for attachment upload.
# The tool is absent when this is empty or the transport is remote.
WIKI_UPLOAD_ALLOWED_DIRS=/Users/me/wiki-attachments
# Maximum local attachment size in bytes (default: 104857600).
WIKI_MAX_ATTACHMENT_BYTES=104857600
# Required when streamable-http and Wiki delete/recovery are enabled.
# Ordered base64url keys (>=32 decoded bytes): first encrypts, all decrypt.
MCP_TOKEN_ENCRYPTION_KEYS=base64url-current-key,base64url-previous-keyHTTP deployments have three explicit modes: loopback development, static single-tenant bearer, and multi-user Yandex OAuth backed by encrypted memory/Redis state. CLI transport overrides are validated before server construction, authenticated HTTP requests fail closed without an SDK auth context, and MCP access tokens must be distinct from Yandex credentials. See authentication and deployment for IAM headers, scopes, PKCE, callback registration, key rotation, TLS/proxy rules, and Compose profiles.
Wiki tools and permission gates
WIKI_READ publishes eight reference reads plus wiki_get_tree. WIKI_WRITE adds page append/clone/comment operations and the grid create/update/copy/row/cell/column mutations. WIKI_DELETE adds page/grid/row/column deletion and page recovery. Local attachment upload additionally requires stdio and a non-empty WIKI_UPLOAD_ALLOWED_DIRS; it is never registered for remote transports.
Every locator and grid owner is resolved and checked against WIKI_ALLOWED_ROOTS before data is returned or changed. Grid mutations require the caller-provided revision, are serialized per grid within one process, and conflicts are surfaced without automatic replay. Page clone and grid copy accept only validated exact-origin operation URLs; those URLs are not returned to MCP clients.
Page deletion returns a random MCP recovery handle rather than Yandex's token. Handles expire after 15 minutes, are principal-bound and single-use, and the upstream token is encrypted at rest. Multi-user replicas store handles in the same Redis backend as OAuth state, so another replica can consume them after a restart; local/static deployments use process-local handles. Remote delete/recovery requires MCP_TOKEN_ENCRYPTION_KEYS.
Disk tools and permission gates
DISK_READ exposes disk_info, list/recent/search/metadata/download, disk_list_trash, and the bounded-text disk_read compatibility tool. disk_get_public_resource is additionally registered only when DISK_ALLOWED_PUBLIC_KEYS is non-empty. Every direct path is checked before the HTTP call; recent, search, embedded children, and Trash results are post-filtered before output.
DISK_WRITE exposes inline upload, folder/copy/move/rename, publish/unpublish, and—when DISK_UPLOAD_URL_ALLOWED_HOSTS is non-empty—URL import. Local-file upload and its four local job tools require stdio plus DISK_UPLOAD_ALLOWED_DIRS; they are absent remotely. Jobs are in-memory, bounded, expire, never return source paths or credentials, and are cancelled during shutdown.
DISK_DELETE exposes resource deletion and Trash restore. Permanent deletion of a configured root is refused. disk_empty_trash is absent unless the allowed roots include / and DISK_ALLOW_GLOBAL_DESTRUCTIVE=true; each invocation also requires literal confirm=true.
Search contract and API drift
The canonical search tool queries Wiki and Disk concurrently, returns Wiki-first round-robin results, reports partial source failures, and uses a signed composite cursor. Standalone disk_search cursors and canonical workspace cursors are distinct and bound to the normalized query and caller. Invalid or stale cursors fail closed.
Wiki full-text search uses POST /v1/search. The endpoint is tracked as YANDEX_API_DOCS_WIRE_DRIFT because documented and observed Yandex fields can change independently. If the search endpoint is unavailable or its successful response no longer matches the typed contract, the server uses a bounded descendants fallback. Fallback results are explicitly marked degraded=true and search_mode="descendants"; authentication, permission, rate-limit, transport, validation, and normal empty-result cases never trigger fallback.
Every Wiki/Disk result is post-filtered against configured roots even when an upstream filter was sent. An enabled service with no allowed roots fails startup. Signed downloads/uploads use a separate tokenless transport: HTTPS/Yandex suffix, all DNS answers, the connected peer, redirects, and byte caps are checked without forwarding OAuth headers.
The opt-in live drift sweep mutates only explicitly supplied scratch subtrees, refuses /, and always attempts cleanup:
uv run python scripts/contract_sweep.py \
--acknowledge-live \
--wiki-scratch-root team/mcp-contract-sweep \
--disk-scratch-root /mcp-contract-sweepOAuth Setup
Go to Yandex OAuth portal.
Create a new client application.
Grant permissions for "Yandex.Disk REST API" (
cloud_api:disk.read,cloud_api:disk.write,cloud_api:disk.info) and "Yandex Wiki" (wiki:read,wiki:write).Generate and save the OAuth token to your
.envfile.
For multi-user mode, register the exact HTTPS MCP_OAUTH_CALLBACK_URL instead of generating a global token, then set YANDEX_OAUTH_CLIENT_ID, YANDEX_OAUTH_CLIENT_SECRET, both auth modes to multi-user, Redis, and independent cursor/encryption key rings.
Running
Run via the provided CLI:
uv run yandex-workspace-mcpTo run diagnostics and verify configuration:
uv run yandex-workspace-mcp doctorClient Configuration (Claude Desktop / Cursor)
Add the following to your MCP client's configuration file:
{
"mcpServers": {
"yandex-workspace": {
"command": "uv",
"args": [
"--directory",
"/path/to/yandex-workspace-mcp",
"run",
"yandex-workspace-mcp"
],
"env": {
"YANDEX_OAUTH_TOKEN": "YOUR_TOKEN",
"YANDEX_WIKI_ORG_ID": "YOUR_ORG_ID"
}
}
}
}Available Tools
8 toolsdisk_get_metadataBRead-onlyIdempotent
Get metadata for a file or folder on Yandex Disk
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint, but the description adds no additional behavioral context such as return format, path requirements, or error conditions. It simply restates the purpose without extra value.
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?
One concise, front-loaded sentence that gets straight to the point with no redundant words.
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?
With no output schema and no parameter documentation, the description is too minimal to fully prepare the agent for call construction and result interpretation. It lacks details on return value and path requirements.
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?
The input schema has a single 'path' parameter with no description (0% coverage), and the tool description does not explain the expected format or semantics of the path, leaving the agent without guidance on what to supply.
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 uses the specific verb 'Get' with the resource 'metadata for a file or folder on Yandex Disk', clearly distinguishing it from siblings like disk_read (content) and disk_list (list files).
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 clearly implies this tool is for retrieving metadata, and the context of sibling tools like disk_read and disk_list makes the intended use apparent. However, it does not explicitly exclude scenarios or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disk_listBRead-onlyIdempotent
List contents of a folder on Yandex Disk
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering safety aspects. The description's 'List contents' is consistent but adds no extra behavioral context such as pagination or return format. Since annotations cover the main transparency needs, a 3 is appropriate.
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 sentence with no unnecessary words, effectively front-loading the tool's purpose.
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?
For a 3-parameter tool with no output schema, the description is too minimal. It doesn't explain how limit/offset work, what the returned list contains, or any edge cases, making it incomplete for full agent understanding.
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 0%, and the description doesn't elaborate on 'path', 'limit', or 'offset'. Parameter names are somewhat self-explanatory, but the description adds no extra meaning beyond the schema's basic titles and defaults.
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 clearly states it lists contents of a folder on Yandex Disk, with a specific verb and resource. However, it does not differentiate this from sibling tools like disk_get_metadata or disk_read.
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 no guidance on when to use this tool versus alternatives. It offers no context about suitable use cases or exclusions, leaving the agent without selection help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disk_readARead-onlyIdempotent
Read text content of a file on Yandex Disk
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering the safety profile. The description adds 'text content' as a limitation, implying binary files may not be supported. However, it does not disclose potential error conditions, file size limits, or encoding behavior, so transparency is adequate but not extensive.
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, concise sentence that front-loads the purpose with no redundant information. Every word contributes to understanding the tool's function.
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?
For a simple read tool with one parameter, an output schema, and annotations, the description is minimally complete. It communicates the core function and one limitation, but lacks details on path conventions or potential error scenarios, which would improve completeness.
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?
The schema only defines 'path' as a required string with no description. The tool description adds that the path refers to a file on Yandex Disk, giving context to the parameter. However, it does not explain path format (e.g., relative to root, full URL) or any constraints, so the description only partially compensates for the 0% schema coverage.
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 clearly states the tool reads text content of a file on Yandex Disk, using the specific verb 'read' and the resource 'file on Yandex Disk'. It distinguishes from sibling tools like disk_list, which lists files, and disk_get_metadata, which retrieves metadata, by specifying content reading.
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 no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It states what the tool does but doesn't indicate scenarios such as binary files or path requirements, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchCRead-onlyIdempotent
Fetch a canonical resource by ID from Yandex Workspace
| Name | Required | Description | Default |
|---|---|---|---|
| resource_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | No | |
| text | No | |
| title | Yes | |
| metadata | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and idempotentHint=true, and the description aligns by saying 'Fetch'. However, the description adds minimal context beyond what the annotations provide—just that it's from Yandex Workspace and uses an ID. It doesn't disclose behaviors like not-found handling, permissions, or rate limits, but the annotations cover the safety profile adequately.
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, front-loaded sentence that gets straight to the point. There is no unnecessary filler, but it might be too sparse to be fully useful. Nevertheless, it is efficient and easy to parse.
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?
An output schema exists, so return values aren't required in the description. However, the tool's scope is unclear compared to siblings like disk_read and wiki_get_page. There's no explanation of what 'canonical resource' means or how to obtain valid resource IDs, leaving the agent uncertain about when to invoke this tool.
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 0%, and the description provides no additional meaning for the only parameter 'resource_id'. It doesn't explain what a resource ID looks like, how to find one, or whether it's a UUID, path, or URL. The description completely fails to compensate for the schema's lack of guidance.
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 uses a specific verb ('Fetch') and identifies the resource as 'a canonical resource by ID', which gives a clear sense of the operation. However, 'canonical resource' is somewhat vague and doesn't explicitly distinguish this from sibling tools like disk_read or wiki_get_page, which also fetch resources by ID.
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 about when to use this tool versus the alternatives. It doesn't mention how 'canonical resource' differs from search results or from disk-specific reads, nor does it provide context on prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchBRead-onlyIdempotent
Search across Yandex Disk and Yandex Wiki
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is established. The description adds no extra behavioral context such as result format, pagination, or edge cases, but it does not contradict the annotations. Given the annotations, a neutral score is appropriate.
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, focused sentence with the verb 'Search' at the front, naming both resources without any unnecessary words. Every part contributes to the core purpose, making it highly concise and well-structured.
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 has a simple interface with an output schema and read-only annotations, so completeness is partially covered by structured fields. However, the description lacks parameter semantics and usage differentiation from siblings, leaving gaps for an agent to fully understand how to invoke and use the tool effectively.
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 0%, meaning the schema provides no descriptions for either parameter, only names and types. The tool description adds no explanation of what 'query' or 'limit' mean beyond their field names, failing to compensate for the missing schema descriptions. This provides no added value for parameter understanding.
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 uses the specific verb "Search" and explicitly names both target resources (Yandex Disk and Yandex Wiki). This clearly distinguishes it from the sibling tool wiki_search, which likely covers only Wiki, making the scope unambiguous.
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 implies the tool is for searching across both Yandex Disk and Yandex Wiki, giving a clear context. However, it does not explicitly state when to use this tool over alternatives like wiki_search or disk-specific tools, nor does it provide any exclusions or comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wiki_get_pageARead-onlyIdempotent
Get a Yandex Wiki page by slug
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds no extra behavioral context (e.g., auth requirements, return format, or edge cases), but it does not contradict the annotations.
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, clear sentence that conveys the necessary information without padding. Every word contributes to the purpose.
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 with one parameter, safe annotations, and no output schema. The description explains the operation at a basic level. It does not describe the return value, but for a get-by-slug operation, the return is relatively obvious. Overall, it is reasonably complete given the tool's simplicity.
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?
The schema has one parameter (slug) with 0% description coverage. The description says 'by slug,' which clarifies the parameter's role but does not add format, constraints, or potential values. It provides minimal compensation for the low schema coverage.
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 uses a specific verb ('Get') and identifies the exact resource ('Yandex Wiki page') and the method of access ('by slug'). This clearly distinguishes it from sibling tools like wiki_search (searching) and wiki_get_tree (tree traversal).
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 implies when to use the tool—when you have a specific slug for a Wiki page. However, it does not explicitly mention alternatives or when not to use it, though the sibling list suggests other tools for different purposes. The context is clear but exclusions are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wiki_get_treeARead-onlyIdempotent
Get the tree of pages under a Wiki slug
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering safety. The description adds the concept of a 'tree' (hierarchical structure) but does not disclose behaviors such as error handling, pagination, or depth limits. Since annotations handle the main behavioral traits, a 3 is appropriate.
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, well-structured sentence that front-loads the action and object. It contains no redundant information and is appropriately concise for a simple read tool.
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?
For a simple one-parameter, read-only tool with good annotations and no output schema, the description adequately conveys purpose and input. It lacks some context about return structure or edge cases, but these are not critical given the tool's simplicity and existing annotations.
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 0% (no parameter descriptions in the schema). The description mentions 'under a Wiki slug', which connects the parameter but does not explain what a slug is, its format, or how to obtain it. With one required parameter and no schema descriptions, more explanation is needed.
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 'Get the tree of pages under a Wiki slug' uses a specific verb (Get) and resource (tree of pages) and identifies the input scope (Wiki slug). It clearly distinguishes from siblings like wiki_get_page (single page) and wiki_search (search), as it targets the hierarchical page tree.
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 implies when to use this tool—when the tree of pages under a wiki slug is needed—but provides no explicit guidance on when not to use it or how it compares to alternatives like wiki_get_page. No exclusions or alternative references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wiki_searchCRead-onlyIdempotent
Search Yandex Wiki pages
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, so the safety profile is covered. Yet the description adds no further behavioral context such as pagination, result format, or query syntax, leaving the agent without useful operational details.
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 sentence, front-loaded with the main purpose, containing no redundant or irrelevant words. It is appropriately concise for the tool's surface simplicity.
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?
With no output schema and no parameter descriptions, the description leaves significant gaps. It does not explain what results are returned, how search ranking works, or how page and limit affect the output, making it incomplete for a tool with this complexity.
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 0%, and the description does not mention any parameters. While 'query', 'page', and 'limit' are self-explanatory, the description fails to compensate for the lack of schema-level descriptions or provide usage details such as expected query format or pagination behavior.
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 clearly states the tool searches Yandex Wiki pages, which is a specific verb+resource. However, it does not differentiate from the sibling tool 'search' or other wiki-specific tools like wiki_get_page.
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?
No guidance is provided on when to use this tool versus alternatives such as 'search' or 'wiki_get_page'. There is no mention of exclusions, prerequisites, or typical use cases.
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.
8 tool updates
v0.1.0- First observed
disk_get_metadata - First observed
disk_list - First observed
disk_read - First observed
fetch - First observed
search - First observed
wiki_get_page - First observed
wiki_get_tree - First observed
wiki_search
TDQS
Scored across 8 tools
Search and wiki_search overlap, with wiki_search being a subset of the generic search. Fetch could be confused with the specific getters (disk_get_metadata, wiki_get_page), though its ID-based approach differs slightly. Other tools are clearly distinct.
The disk_* and wiki_* prefixes create a consistent sub-pattern, but generic tools like search and fetch break the pattern. Naming is readable and mostly predictable, but not fully uniform.
With 8 tools covering two domains (Disk and Wiki), the count is well-scoped and appropriate for the server's purpose. Every tool has a clear role, and the number is within the ideal 3-15 range.
The tools cover search, reading, and retrieval well, but lack any write operations (create, update, delete) for both Disk and Wiki. This is a notable gap if the workspace is meant for more than read-only access, though it may be intentional for a search-focused MCP.
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
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Cloud-hosted MCP server for durable AI memory
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA comprehensive production-ready MCP server with AI integration, plugin management, and web-based administration. Features multi-database support, RAG capabilities, SSH/SFTP access, and a built-in plugin hub for managing the MCP ecosystem.-
- AlicenseNot gradedqualityCmaintenanceA production-ready MCP server that enables AI assistants to manage enterprise Active Directory environments through 45 specialized tools for users, groups, and GPOs. Its multi-client architecture allows for the secure management of multiple AD domains from a single codebase using natural language commands.3MIT
- AlicenseNot gradedqualityAmaintenanceA production-ready MCP server that enables AI assistants to intelligently understand, analyze, edit, navigate, and review software projects with multi-workspace support, Git integration, and semantic search.1MIT
- AlicenseAqualityAmaintenanceMCP server for Yandex Wiki with full-text search. Read and write pages, comments, attachments, and dynamic tables (grids); optional server-side read-only mode for agents. Docker-ready.335Apache 2.0