Xenmark MCP server
OfficialClick 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., "@Xenmark MCP serverAnything new for me in Xenmark today?"
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.
Xenmark MCP server
An MCP server that lets AI assistants — Claude, Cursor, VS Code and others — read your Xenmark drawing-review data: projects, drawings, revisions, comments, replies and your notification inbox. Read-only, runs on your own machine, uses a token you create inside Xenmark.
Status: released. On npm as xenmark-mcp and in the official MCP Registry as io.github.Xenmark/xenmark-mcp.
What you can ask
"Anything new for me in Xenmark?" / "Who mentioned me today?"
"Which projects am I on, and what's my role?"
"What's still open on drawing 1001-300, Rev. B?"
"List the unresolved comments on that revision and who raised them."
"What did Greta reply on comment #7?"
Every answer carries a link straight into Xenmark.
Related MCP server: safe-sql-mcp
What it never does
It never writes to Xenmark, never sees your password, never returns e-mail addresses, files, billing or account roles, and never reaches projects you are not a member of. It talks to exactly one server: https://api.xenmark.app, the official read-only Integration API (contract).
Get a token
In Xenmark: profile → Account & Security → Connected apps → Connect an app → "Personal API token (Postman, GitHub)" → Generate. The token is shown once; keep it in the assistant's config only. Revoke it any time from Connected apps.
Install
Requires Node.js 18 or newer. The server runs with npx -y xenmark-mcp — nothing to clone or build. (To run from a source checkout instead: npm install && npm run build, then point your assistant at dist/index.js.)
Claude Desktop — edit claude_desktop_config.json (Settings → Developer → Edit Config) and add:
{
"mcpServers": {
"xenmark": {
"command": "npx",
"args": ["-y", "xenmark-mcp"],
"env": { "XENMARK_TOKEN": "xmk_live_YOUR_TOKEN_HERE" }
}
}
}Restart Claude Desktop; the Xenmark tools appear under the tools icon.
Cursor — Settings → MCP → Add new server, same command, args and env.
VS Code (Copilot agent mode) — add the same entry under "servers" in .vscode/mcp.json or your user mcp.json.
From a source checkout, replace the command with node and the args with the full path to dist/index.js.
Support
support@xenmark.app · Security: see SECURITY.md. Never post a token anywhere public.
Available Tools
9 toolsxenmark_find_drawingARead-onlyIdempotent
Find drawings by drawing number or name fragment across the user's projects (or within one project) and return their ids, project, revision_count and web_url. Use this when the user names a drawing rather than an id. Walks at most 20 projects and says so if truncated.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Drawing number or part of the name, e.g. "1001-300". | |
| project_id | No | Limit the search to one project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior beyond that: the 20-project walk cap and the fact that truncation is reported, plus the shape of the result. Minor gap in not describing matching/fuzzy-match semantics.
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?
Three compact sentences, front-loaded with purpose, then usage condition, then the operational caveat. Every sentence carries distinct information with no padding.
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 two-parameter read tool with no output schema, the description covers purpose, usage trigger, result fields, and the truncation limit. Nothing an agent needs to invoke it correctly is missing.
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%, so both parameters are already documented, including the example format '1001-300'. The description's 'or within one project' merely restates what project_id's schema description already says, adding no syntax or matching detail. Baseline 3 applies.
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 and resource ('Find drawings by drawing number or name fragment') plus the scope (across the user's projects or within one), and even enumerates the returned fields. This clearly distinguishes it from siblings like xenmark_list_drawings or xenmark_list_projects.
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?
It gives an explicit selection condition: 'Use this when the user names a drawing rather than an id.' That routes the agent away from id-based lookups. It does not, however, explicitly contrast with xenmark_list_drawings, so the boundary with that sibling is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_list_commentsCRead-onlyIdempotent
Comments on one revision: id, comment_number (quote this to people), title, description, status, author_display_name, page, reply_count, annotation_count, web_url, plus a replies_preview of up to 3 replies and replies_truncated.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque cursor from a previous result's next_cursor, to fetch the next page. | |
| revision_id | Yes | Revision UUID. | |
| include_replies_preview | No | Include up to 3 replies per comment (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds one genuine behavioral fact beyond that: replies are truncated ('replies_truncated', 'up to 3 replies'), warning the agent that results may be partial. It says nothing about pagination behavior or the cursor's meaning.
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 sentence, front-loaded with the resource and scope, with no filler. The dense field enumeration is defensible given there is no output schema, though it makes the sentence long.
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?
Because no output schema exists, enumerating the returned fields is genuinely valuable and largely carries the return contract. However, it omits pagination mechanics (how next_cursor/cursor relate) and gives no context on when this list is preferable to sibling listing tools.
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%, so cursor, revision_id and include_replies_preview are all documented in the schema; baseline is 3. The description lightly corroborates the replies-preview behavior but adds no format, default, or constraint detail beyond what the schema already states.
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 phrase 'Comments on one revision' identifies the resource and scope, and the field list confirms it is a listing operation, but no explicit verb (list/retrieve) nor any differentiation from sibling tools like xenmark_list_replies or xenmark_review_summary is given. An agent can infer intent from the name, but the description itself reads as a return-shape spec rather than a purpose statement.
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 when-to-use guidance, no mention of what revision_id to supply, and no indication of how this differs from xenmark_list_replies or xenmark_review_summary. The one actionable hint ('quote comment_number to people') is about downstream use, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_list_drawingsARead-onlyIdempotent
Drawings in one project: id, drawing_number, name, revision_count, created_at, web_url. Needs the project id from xenmark_list_projects or xenmark_find_drawing.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque cursor from a previous result's next_cursor, to fetch the next page. | |
| project_id | Yes | Project UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered without the description. The description adds the returned field set, which is useful given there is no output schema, but it says nothing about pagination behavior even though a cursor parameter exists.
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?
Two short sentences, no filler, with the resource scope front-loaded and the prerequisite appended. Every clause carries information an agent needs.
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 only two parameters, full schema coverage, no nesting and no output schema, the description covers the essentials: what is returned and where the required id comes from. The only gap is that it does not mention the cursor/next-page flow, though the schema does document it.
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%, so the baseline is 3, and the description goes beyond it by telling the agent where project_id must be obtained (xenmark_list_projects or xenmark_find_drawing). That sourcing guidance is real added meaning not present in the schema.
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?
It names the resource (drawings) scoped to one project and enumerates the returned fields, so an agent knows exactly what comes back. The listing verb is implied rather than stated, and it does not directly contrast itself with the similar-sounding siblings xenmark_list_revisions or xenmark_find_drawing, so sibling differentiation is only partial.
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?
It states the prerequisite that project_id must come from xenmark_list_projects or xenmark_find_drawing, which implies the calling context. However, it never says when to prefer this list over xenmark_find_drawing for the same data, so the choice between siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_list_projectsCRead-onlyIdempotent
Projects the user owns or is a member of: id, name, description, company_name, status (active/archived), my_role, created_at, updated_at, web_url.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque cursor from a previous result's next_cursor, to fetch the next page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds nothing behavioral beyond that — notably it never mentions that results are paginated via cursor, which is the one behavior an agent needs to know here.
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?
It is a single compact sentence with no filler, which is good, but it is not front-loaded: it leads with a field inventory rather than the action, forcing the agent to reconstruct purpose from the name.
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, enumerating returned fields (id, name, status, my_role, web_url, etc.) is genuinely useful and partially compensates. However, for a paginated list tool the absence of any pagination or result-size guidance leaves a real gap in what an agent needs to call it correctly.
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 single cursor parameter is fully documented in the schema itself. The description does not reference the cursor or pagination at all, so it adds no parameter meaning beyond the schema — baseline 3 applies with only one optional param.
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 never states a verb — it reads as a colon-delimited field list rather than a statement of what the tool does. The only clue to purpose is the scope phrase 'Projects the user owns or is a member of,' which does meaningfully narrow the resource but leaves the operation implied by the tool name alone.
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 when-to-use guidance, no mention of alternatives among siblings (e.g. find_drawing, recent_activity), and no note about when to page versus stop. The ownership/membership scope is the only contextual hint, which is thin for an agent choosing between list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_list_repliesARead-onlyIdempotent
All replies on one comment, paginated: id, author_display_name, body, created_at, edited_at.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque cursor from a previous result's next_cursor, to fetch the next page. | |
| comment_id | Yes | Comment UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, and non-destructive, so the safety profile is covered. The description adds genuinely new context by disclosing pagination and enumerating the returned fields, though it omits ordering and any detail on how cursors behave across cycles.
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 front-loaded sentence with zero filler: scope, pagination, and return fields in a single clause. Nothing could be trimmed without losing information.
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, listing the returned fields is exactly the right compensation, and annotations cover the safety profile. Only ordering of results and the semantics of exhausting the cursor are unaddressed, which are minor gaps for a simple paginated read.
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%, with both comment_id and the opaque cursor fully documented in the schema. The word 'paginated' hints at the cursor's role but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
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?
States a specific verb (list) and resource (replies) with a precise scope ('on one comment') and enumerates the returned fields, which plainly separates it from the sibling xenmark_list_comments.
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?
Usage is only implied: the agent infers it should call this when it already has a comment_id and wants that comment's replies. There is no explicit when-to-use, when-not-to-use, or guidance against reaching for xenmark_list_comments instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_list_revisionsARead-onlyIdempotent
Revisions of one drawing: id, revision_label, original_filename, size_bytes, content_type, created_at, web_url. Files themselves are never available.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque cursor from a previous result's next_cursor, to fetch the next page. | |
| drawing_id | Yes | Drawing UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds a genuinely useful behavioral constraint: 'Files themselves are never available,' which stops an agent from expecting downloadable content. It stops short of describing ordering or pagination behavior.
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 tight sentence: the resource comes first, then the returned fields, then the availability caveat. Nothing is wasted, though the field list is dense and would benefit from being deferred to an output schema.
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, enumerating the returned fields in the description is valuable and compensates well. The availability caveat covers the main agent trap. Minor gaps remain around result ordering and what distinguishes a revision, but nothing critical for correct invocation is missing.
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 both parameters (drawing_id, cursor) are documented there, including the opaque cursor contract. The description adds only the implicit notion that revisions are scoped to a single drawing, so the baseline 3 applies.
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?
States the specific resource and scope: revisions belonging to one drawing, and enumerates the fields each revision carries. This distinguishes it from xenmark_list_drawings and xenmark_list_comments, though it never names those siblings explicitly. A clear verb+resource pairing without sibling routing.
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 gives no when-to-use guidance and never references an alternative such as xenmark_find_drawing or xenmark_list_drawings. The need for a drawing_id implies the tool is scoped to an already-known drawing, but that is inference, not stated guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_recent_activityARead-onlyIdempotent
The user's Xenmark notification inbox, newest first: new comments, replies, mentions and status changes on drawings the user is part of. Each row has actor_name, project_name, drawing_number, revision_label, comment_number, title, preview, mention_labels, old_status/new_status (status changes), read, created_at and a web_url deep link into Xenmark. Use web_url for links - never build Xenmark URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return (default 30, max 100). | |
| unread_only | No | Only unread notifications. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, non-open-world behavior, so the safety profile is covered. The description adds genuine value beyond that: the sort order (newest first), the exact shape of each row, and the operational constraint 'Use web_url for links - never build Xenmark URLs'. It does not mention pagination behavior, but for a read-only feed that is a minor omission.
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?
Two sentences, front-loaded with the resource and ordering before the row fields. The long field enumeration is dense but earns its place given there is no output schema. Minor cost: the middle sentence reads as a flat list rather than grouped by 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?
With no output schema, the description carries the full burden of describing the return shape, and it does so completely: actor, project, drawing, revision, comment, title, preview, mention labels, old/new status, read flag, timestamp, and deep link. Nothing an agent needs to interpret a row is missing.
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 both parameters (limit, unread_only) are fully documented in the schema itself. The description adds only the implicit framing of a notification feed with a default recency ordering; it does not clarify limit semantics or how unread_only interacts with the 'read' field it mentions.
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?
States a specific verb+resource ('the user's Xenmark notification inbox, newest first') and enumerates the event types it aggregates (comments, replies, mentions, status changes). This is clearly distinguishable from siblings like xenmark_list_comments or xenmark_list_replies, which return a different scope.
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?
Usage is implied by 'notification inbox' — an agent can infer this is the cross-project activity feed rather than a per-drawing comment list. However, no explicit when-to-use/when-not guidance or named alternative (e.g., 'for full comment threads on one drawing, use xenmark_list_comments') is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_review_summaryARead-onlyIdempotent
Comment-status rollup for one or more revisions (up to 100): total_comments, open_count, progress_count, closed_count, last_activity_at per revision. Revisions the user cannot access are silently omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| revision_ids | Yes | Revision UUIDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context beyond annotations: the 100-revision cap and the important caveat that inaccessible revisions are silently omitted (a partial-result behavior). It doesn't discuss rate limits or auth, but the silent omission note is a meaningful addition.
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 dense sentence: front-loads the purpose, lists output fields, states the cap, and ends with the access caveat. Every clause earns its place; no redundancy.
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 read-only aggregation tool with full schema coverage and no output schema, the description covers purpose, output shape, limits, and an important edge case (silent omission of inaccessible revisions). It could mention ordering or whether counts are cumulative, but it is largely 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% so the parameter is well-documented in the schema (array of revision UUIDs, min 1, max 100). The description reinforces the up-to-100 limit but adds little new syntax. Baseline for 1 param with full coverage is high, and the description corroborates the cap.
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?
States a specific verb+resource ('comment-status rollup for revisions') and enumerates the exact output fields (total_comments, open_count, progress_count, closed_count, last_activity_at). This clearly distinguishes it from siblings like xenmark_list_comments and xenmark_list_revisions which list rather than aggregate.
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?
Usage is implied by the description - agents can infer to use this when they need aggregated comment status rather than raw lists. However, no explicit when-to-use or when-not-to-use guidance against alternatives like xenmark_list_comments is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xenmark_whoamiARead-onlyIdempotent
Identify the Xenmark account behind the configured token: user_id, display_name, company. Never returns e-mail, plan, billing or role.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral content beyond that: the explicit negative scope ("Never returns e-mail, plan, billing or role") and the dependence on a configured token, which tells the agent not to promise data it cannot get.
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 front-loaded sentence: purpose first, then the returned fields, then the exclusions. Every clause carries information and nothing is repeated from the schema or annotations.
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, the description must describe returns itself, and it does so by naming the three fields and the four it never returns. It does not cover failure modes (e.g., missing/expired token) or the return envelope, which is a minor gap for an otherwise self-contained zero-parameter 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?
The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter semantics to clarify and the description correctly spends no words on inputs, instead describing outputs.
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?
States a specific verb ("Identify") and a precise resource ("the Xenmark account behind the configured token"), then enumerates the returned fields (user_id, display_name, company). This is unmistakably distinct from the list_*/review/find siblings, which all operate on projects, drawings, revisions, or comments rather than session identity.
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 phrase "behind the configured token" makes the usage context clear: this answers questions about the current session's identity rather than any artifact, so it has no overlap with the list/find siblings. It stops short of an explicit when-to-use/when-not statement or naming an alternative, which keeps it below a 5.
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.
9 tool updates
v0.1.3- First observed
xenmark_find_drawing - First observed
xenmark_list_comments - First observed
xenmark_list_drawings - First observed
xenmark_list_projects - First observed
xenmark_list_replies - First observed
xenmark_list_revisions - First observed
xenmark_recent_activity - First observed
xenmark_review_summary - First observed
xenmark_whoami
TDQS
Scored across 9 tools
Each tool targets a distinct resource or action: identity, notifications, projects, drawings, revisions, comment rollup, comments, replies, and drawing search. The only potential overlap (list_drawings vs. find_drawing) is explicitly clarified by descriptions, so an agent can reliably choose the right tool.
All names use a consistent snake_case style with a uniform 'xenmark_' prefix, which makes them predictable and readable. However, the semantic pattern is slightly mixed: most follow list_<noun>, but there are also find_drawing, review_summary, recent_activity, and whoami, so it is not a strict verb_noun convention throughout.
Nine tools is well-scoped for a read-only data-access server covering projects, drawings, revisions, comments, and activity. Each tool earns its place without redundancy, and the set avoids the bloat that would come from exposing every possible field or operation separately.
The read surface is thorough: identity, activity, projects, drawings, revisions, comments, replies, and a review summary are all covered. However, write operations that are central to a review workflow—posting comments/replies, changing comment status, or marking activity read—are entirely absent, creating a notable lifecycle gap.
Maintenance
Related MCP Connectors
Read-only access to Cogram projects, meetings, email, RFIs and drawings for architects and engineers
- HAVNOAuthapp.havnre
Read-only AI access to HAVN properties, leads, tasks, files, media, and analytics.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Read-only access to your CodeMouse accounts, repositories, and AI pull-request reviews.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides AI assistants with read-only access to inspect database schemas, preview data, and run safe queries across PostgreSQL, MySQL, MongoDB, and SQL Server. It enables AI tools to understand database structures and relationships automatically to generate more accurate code.7 npm7MIT
- FlicenseNot gradedqualityDmaintenanceEnables read-only SQL database access for AI assistants, allowing schema exploration and safe query execution without risk of data modification.-
- AlicenseNot gradedqualityAmaintenanceEnables read-only file-management operations from AI assistants, including health checks, connection and folder listings, search, share-link resolution, metadata retrieval, and on-demand document reading.MIT

AutoRFP.ai MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables AI assistants to connect to AutoRFP.ai and query RFP projects, requirements, tags, and approved content library with read-only access.MIT