CSM Copilot
This is a read-only MCP server that turns incomplete synthetic customer evidence into triage, readiness checks, bilingual follow-up drafts and technical handoffs — without sending anything.
list_accounts— Find accounts past a contact threshold (stale_days, default 3), ranked by planned launch date; accepts anas_ofdate to recompute elapsed time from the same fixed snapshot, withinclude_liveto opt in live accounts.get_account_context— Retrieve an account's app/platform integrations, issues and attributed synthetic evidence.check_readiness— Evaluate six scoped requirements per integration, preservingunknownvsnot_met(checklist completion is not launch approval).triage_issue— Suggest candidate checks, categories, questions and sources for blank Offerwall or reward-callback prose; a lexical baseline that never confirms root cause.draft_ticket— Build a technical handoff from a recorded issue ID, explicitly exposing absent fields; does not submit.draft_followup— Produce an English or Chinese (lang) template bound to evidence; does not send or update contact history.validate_draft— Lint text for narrow promise patterns; zero flags is not factual verification.friction_digest— Aggregate recurring checklist gaps and failures into Product review questions; counts accounts/integrations separately and logs nothing.Safety profile — Every tool is
readOnlyHint,idempotent,destructiveHint: falseand closed-world (openWorldHint: false); all work is against fixed synthetic snapshots, so outputs are drafts and diagnoses rather than actions.
Allows managing Android app/platform integrations for Offerwall onboarding, blank-offerwall reports, device checks, and reward callbacks within the CSM workflow.
Allows managing iOS app/platform integrations for Offerwall onboarding, readiness checklists, and launch-plan reviews within the CSM workflow.
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., "@CSM Copilotcheck the Android account's onboarding readiness and draft a bilingual follow-up"
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.
Independent portfolio project. Not affiliated with, endorsed by, or connected to Unity. All customer records are synthetic.
CSM Copilot
Move customer onboarding forward without turning uncertainty into a promise.
A customer-success portfolio by Yuchi Wang. A Python workflow and Model Context Protocol (MCP) server turn incomplete account evidence into bilingual follow-ups and technical handoffs.
Explore the three-minute demo → · Project brief (PDF) · Interview walkthrough

Workflow preview from revision 0ea4b88. The website replays saved outputs; it does not run a live AI chat or send messages.
The business problem
A publisher wants to launch on Friday. iOS checks are complete, but a non-test Android device shows a blank Offerwall. The CSM needs a focused customer question, a clear technical handoff and a record of what remains uncertain.
The prototype covers five fictional accounts and six app/platform integrations. It separates missing evidence from a recorded failure and keeps each platform's conclusions tied to its own sources.
Related MCP server: system-brain-mcp
Start with one case
Step | Open the evidence | What to look for |
1. Decide what to ask | Unknown settings require confirmation; a failed device check requires a fresh test. Switch between English and Chinese. | |
2. Prepare the handoff | Retain supplied details; request the SDK version, time window and redacted logs. Keep the root cause unconfirmed. | |
3. Compare the next action | Its complete checklist leads to launch-plan review, not launch approval. |
Then add fresh Android evidence: passing checks changes the next question without automatically resolving the earlier complaint. Drafts remain unsent and contact history stays unchanged.
Where AI fits
Layer | Responsibility |
Python tools | Select accounts, calculate dates, apply scoped checklist rules and assemble draft templates. Works without a model or API key. |
Optional AI host | Propose tool calls and write explanations. Later recorded workflows use explicit host constraints and correction feedback. |
Human reviewer | Judge evidence adequacy, tailor communication and decide what to do next. |
One finding worth inspecting: a model completed four requested tool calls, then described a scoped iOS checklist as “full compliance.” Compare its words with the recorded result →
The repository preserves 19 local Qwen attempts across four prescribed tasks, including failures and assisted corrections. Later morning runs complete seven calls, but matching structured fields still leaves gaps in the explanation. These are exploratory development records, not a controlled benchmark. Browse the experiments · Inspect the division of work
What the evaluation actually shows
Triage: 12/12 development cases and 16/18 reused cases match the authored categories. Inspected failures informed rule changes; this is not independent accuracy.
Promise checks: eight diagnostic probes include false positives and false negatives. Zero flags does not establish factuality.
Engineering: Windows and Ubuntu CI check workflow behavior, browser logic, real MCP transport, generated artifacts and installed packages. Use the badges above for current status.
No independent human validation, measured customer benefit or production readiness is claimed. Evaluation · Verification scope · Limitations
Portfolio rationale
This project connects customer communication, business analytics and process controls. Yuchi selected the direction, audience and CSM workflow. Implementation, tests, documentation and synthetic cases used substantial AI assistance; unaided implementation and completed personal mastery are not claimed.
The learning path turns the project into three concrete exercises: explain one customer decision, trace one AI mistake and run one experiment on a copied dataset. Six interactive practice decisions keep initial reasoning separate from reflection.
Explore or reproduce
Your goal | Start here |
Present the project | |
Explain a product question | |
Connect cases to Product | Feedback review: attributed gaps and questions to validate |
Keep a fixed demo | v0.30.2 interview package; contents and checksum. The hosted site can be newer. |
Run locally | Setup guide: browser replay or Python 3.11–3.13 workflow; model optional |
Tools
Eight read-only MCP tools and two workflow prompts:
Tool | Purpose |
| Select the follow-up queue |
| Retrieve integrations, issues and evidence |
| Evaluate each app/platform |
| Suggest checks and questions using a lexical baseline |
| Prepare a handoff with explicit missing fields |
| Produce an English or Chinese template |
| Flag narrow promise patterns |
| Aggregate snapshot gaps into Product questions |
MCP setup · Protocol transcript · Architecture · Full verification commands
Repository map
src/csm_copilot/ Workflow engine, MCP server and synthetic fixtures
demo/ Interactive replay, briefs and PDFs
tests/, tests-js/ Authored behavior and boundary checks
evaluation/ Diagnostic cases and evaluators
evidence/ Outputs, protocol transcript and model recordings
docs/, scripts/ Methods, learning guides, builders and verificationEvidence boundaries · Development history · Sharing guide
Public guidance is paraphrased and cited in the source register, reviewed 2026-10-14. Project policies are labeled separately. Code is MIT licensed; referenced documentation retains its own terms.
Available Tools
8 toolscheck_readinessARead-onlyIdempotent
Check six scoped requirements per app/platform, preserving unknown vs not_met.
checklist_complete means only this project's checklist; it is not launch approval.
| Name | Required | Description | Default |
|---|---|---|---|
| integration_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior, so the description is not required to cover safety. It adds real behavioral context beyond that: a three-state result model ('unknown vs not_met') and a warning not to read checklist_complete as launch approval. That interpretation guidance is valuable and not derivable from the structured fields.
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, front-loaded with the capability and followed by the key semantic caveat. Nothing is wasted, though the phrasing is terse enough that a little more structure could have been added without 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?
An output schema exists, so return values need not be described, and annotations cover the safety profile. The description supplies the critical interpretation caveat about checklist_complete; the only real omission is parameter meaning, which is scored separately.
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 single required parameter integration_id has 0% schema description coverage, so the description must compensate and largely does not. 'per app/platform' hints at scoping but never explains what an integration_id is or where it comes from, leaving the one input undocumented.
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 and resource ('Check six scoped requirements per app/platform'), which tells an agent exactly what the tool returns. It does not explicitly differentiate from siblings, but the sibling set (draft_ticket, triage_issue, etc.) is functionally distinct enough that this is a minor gap.
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 second sentence clarifies how to interpret the result ('checklist_complete means only this project's checklist; it is not launch approval'), which is a genuine usage caveat. However, there is no guidance on when to call this versus alternatives or what prerequisites exist, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_followupBRead-onlyIdempotent
Prepare an evidence-bound bilingual template. Does not send or update contact history.
A host may rewrite the wording but must preserve uncertainties and source references.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | en | |
| integration_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real substance beyond them: it will not send or mutate contact history, and it defines the output contract that a host may reword the text but must preserve uncertainties and source references. That is a genuine behavioral constraint an agent needs to respect.
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 short sentences with no filler, and the core purpose plus the negative constraint are front-loaded. The split into two paragraphs is slightly awkward for such a brief definition but nothing is wasted.
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 need not be described, and the behavioral constraints are covered. The remaining gap is the required integration_id, undocumented in both schema and description, which leaves the caller guessing what evidence source to bind.
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%, so the description must carry parameter meaning. 'Bilingual' loosely signals that a language choice exists (matching the lang enum), but the required 'integration_id' is never explained and no format, source, or selection guidance for lang is given.
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 ('Prepare') and resource ('evidence-bound bilingual template'), so the agent knows it produces a draft artifact rather than sending anything. However it never names 'follow-up' explicitly nor distinguishes itself from the sibling draft_ticket, so an agent cannot tell the two drafts apart from the text 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?
'Does not send or update contact history' implicitly scopes usage to a preparation-only step, and the name suggests drafting a follow-up. But it never says when to prefer this over draft_ticket, validate_draft, or triage_issue, nor any prerequisite or ordering guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_ticketBRead-onlyIdempotent
Prepare a technical handoff from a recorded issue; expose absent fields. Does not submit.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. 'Does not submit' adds a useful drafting semantic that reinforces the non-write nature, and 'expose absent fields' hints at the response shape, but neither goes far beyond 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?
Two short clauses with the purpose front-loaded and the non-submit constraint attached. Efficient, though 'expose absent fields' is slightly cryptic and could be clearer or dropped.
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 low-complexity surface (one param, read-only) plus an existing output schema means return values need not be explained. Still, the definition leaves the draft-vs-followup-vs-validate routing and the meaning of issue_id unaddressed, so it is only minimally 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 description coverage is 0% and the single parameter issue_id is never named or explained. 'From a recorded issue' only loosely implies the parameter refers to an existing issue, adding minimal meaning beyond the schema type.
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 gives a specific verb+resource combo ('Prepare a technical handoff from a recorded issue') and even hints at output ('expose absent fields'). However it never distinguishes itself from siblings like draft_followup or validate_draft, so an agent can't reliably route to it over those alternatives.
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 explicit when-to-use guidance and no alternative named. 'Does not submit' implies a drafting-vs-submitting distinction, but no submit tool exists among the siblings, so the agent is left to infer its place in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
friction_digestARead-onlyIdempotent
Aggregate recurring checklist gaps and failures into Product review questions.
Fixed snapshot; counts distinct accounts and integrations separately. Not a trend, defect diagnosis or model-generated clustering. Does not log or submit feedback.
| Name | Required | Description | Default |
|---|---|---|---|
| include_live | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, yet the description adds genuinely new traits: the output is a fixed snapshot, counts are de-duplicated per distinct account/integration, and nothing is logged or submitted. The only missing behavioral note is what the fixed snapshot's recency/window is.
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 short sentences, zero filler, with the core action stated first and the constraints/non-goals following. Every clause ('fixed snapshot', 'counts distinct accounts and integrations separately', 'does not log or submit feedback') carries distinct decision-relevant 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?
An output schema exists, so return-value shape needn't be explained, and the description adequately covers scope, determinism, non-goals, and side-effect absence for a simple read-only aggregate. The one real hole is the unexplained 'include_live' parameter, which is enough to keep it short of 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 description coverage is 0% and the description never mentions the single parameter 'include_live', nor what toggling it does (e.g. whether it mixes live data into an otherwise fixed snapshot). A one-parameter tool with an undocumented, non-obvious boolean leaves the agent guessing at invocation, so the description fails to compensate for the coverage gap.
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 gives a concrete verb and object: 'Aggregate recurring checklist gaps and failures into Product review questions.' It also implies scope ('counts distinct accounts and integrations separately'), so an agent can tell it is an analytical summary rather than a listing or triage tool. It never names a sibling tool, so differentiation is inferential rather than explicit.
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?
Negative routing exists ('Not a trend, defect diagnosis or model-generated clustering', 'Does not log or submit feedback'), which rules out several plausible misuses and implies this is for snapshot-style review question generation. However, it never says when to reach for this over triage_issue, draft_ticket, or get_account_context, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_contextBRead-onlyIdempotent
Read app/platform integrations, issues and attributed synthetic evidence for an account.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds the scope of what is read (integrations, issues, attributed synthetic evidence), which is genuinely useful beyond the annotations. It does not disclose volume, pagination, or auth requirements, but with an output schema present the return shape is handled elsewhere.
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 compact sentence with the verb front-loaded and zero filler. The comma-separated resource list is slightly dense but every element earns its place.
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 full output schema and strong annotations, so the description does not need to explain returns or safety. What it lacks is positioning among the seven siblings, leaving the agent without guidance on sequencing. Adequate but with a clear gap for a context-priming read 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 single parameter account_id carries no description in either place. The description mentions 'for an account' but never explains the identifier's form (ID vs name, source system). With only one parameter the burden is light, but the definition still does not compensate for the coverage gap.
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 clear verb ('Read') and a specific resource set: app/platform integrations, issues, and attributed synthetic evidence for an account. This distinguishes it from list_accounts (which enumerates accounts) and triage_issue, though it does not explicitly name any sibling. Purpose is understandable without opening the schema.
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 when-to-use or when-not-to-use guidance, and no alternatives are named despite a crowded sibling set (check_readiness, triage_issue, friction_digest). Usage is only weakly implied by the resource list. An agent must guess whether this is a first-step context gatherer or a follow-up to something else.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsARead-onlyIdempotent
Find accounts strictly past the contact threshold; rank by planned launch date.
Defaults to a fixed synthetic snapshot. A generated draft is never a contact. Missing contact history is explicitly unknown. Live accounts are excluded by default. A later as_of recalculates elapsed time from the same dataset; no records are refreshed. Omit as_of or pass null for the snapshot. Empty date strings are invalid.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| stale_days | No | ||
| include_live | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the readOnly/idempotent annotations: fixed synthetic snapshot, as_of recalculates elapsed time from the same dataset without refreshing records, generated drafts are never contacts, and missing contact history is explicitly unknown. These are non-obvious rules an agent could not infer from annotations or schema.
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?
Purpose is front-loaded in the first sentence and each subsequent sentence carries a distinct rule. Some fragments are telegraphic, but none are redundant with 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?
An output schema exists so return values need not be described, and the filtering, default, and edge-case rules are well covered. The remaining gap is the meaning of stale_days relative to the 'contact threshold'.
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%, so the description must compensate, and it does for two of three params: as_of semantics (null/omitted = snapshot, later value recalculates, empty strings invalid) and include_live's default exclusion of live accounts. stale_days is only obliquely referenced via 'contact threshold', leaving the threshold value itself unexplained.
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 and scope: find accounts past a contact threshold, ranked by planned launch date. This is enough for an agent to distinguish it from get_account_context, which plainly retrieves one account's context, though the description never names a sibling explicitly.
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?
Gives conditions (live accounts excluded by default, omit as_of for the snapshot) but never states when to choose this over get_account_context or check_readiness. Usage is implied by the filtering semantics rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
triage_issueARead-onlyIdempotent
Retrieve possible checks for blank Offerwall or reward callbacks.
issue_text must contain customer prose, not an issue ID. For a recorded issue, retrieve its message with get_account_context or use draft_ticket(issue_id). Lexical baseline, not semantic diagnosis; negation/paraphrases can fail. Returns candidate categories, questions and sources, never a confirmed root cause.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_text | Yes | ||
| integration_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world and non-destructive, and the description adds substantive behavioural context beyond them: it is a lexical (not semantic) baseline, negation and paraphrases can cause failures, and it returns candidates rather than a confirmed root cause. That sets accurate expectations about reliability and output nature.
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?
Four short sentences, each earning its place: scope, input requirement, alternative routes, and known limitations. The most decision-critical content (what it returns and what it does not) is front-loaded and there is no filler.
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 need not be spelled out, and the description still usefully summarises the candidate-level output. Input semantics, limitations and alternative tools are covered; the only gap is the undocumented optional integration_id parameter.
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%, so the description carries the burden. It does explain issue_text richly (customer prose vs issue ID), but integration_id is never mentioned, leaving half the parameters undocumented anywhere. Partial compensation for the coverage gap.
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 and resource with narrow scope: retrieve candidate checks for blank Offerwall or reward callbacks. It also distinguishes itself from neighbours by describing what it returns (candidate categories, questions, sources) versus a confirmed diagnosis. The term "checks" is slightly abstract, so it falls just short of a fully self-explanatory purpose.
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?
Explicitly states the input precondition (issue_text must be customer prose, not an issue ID) and names the alternative routes for a recorded issue: get_account_context or draft_ticket(issue_id). This is precisely the when-to-use / when-not-to-use routing an agent needs to avoid calling it with a wrong identifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_draftBRead-onlyIdempotent
Lint narrow promise patterns. No flags does not mean factual or semantic verification.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds a genuinely useful behavioral caveat that annotations cannot convey: passing the lint does not certify factual or semantic correctness. That manages agent expectations about the check's limits, which is exactly the added value this dimension rewards.
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 with no filler, and the core action leads. The terseness borders on cryptic — 'narrow promise patterns' is never unpacked — so it pays a small clarity cost for its brevity.
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 need not be explained. For a single-parameter lint tool that is mostly sufficient, but the description omits the calling context (when in a workflow to validate, what a flag means in practice) that an agent would want.
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% for the single 'text' parameter, so the description must carry the load. It implies the input is draft text to be linted, which is inferable, but it gives no format, length, or content requirements. Minimal compensation for a low-documentation 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?
The description gives a specific verb ('Lint') and target ('narrow promise patterns'), which is more than a restatement of the name. However, 'narrow promise patterns' is undefined jargon, and the description never says it operates on the draft's text or how it relates to draft_ticket/draft_followup. An agent gets a rough sense of the function but not a crisp one.
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 statement of when to call this versus the sibling drafting tools, nor any prerequisites. The second sentence only clarifies how to interpret a clean result, which is a scope caveat rather than usage routing. Guidance is essentially absent.
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.30.1- First observed
check_readiness - First observed
draft_followup - First observed
draft_ticket - First observed
friction_digest - First observed
get_account_context - First observed
list_accounts - First observed
triage_issue - First observed
validate_draft
TDQS
Scored across 8 tools
Each tool targets a distinct stage of the CSM workflow (list, context, readiness, triage, draft, validate, digest). The only mild overlap is between draft_ticket and draft_followup, but their descriptions clearly separate technical handoff from bilingual follow-up templates.
Seven of eight tools follow a clean verb_noun pattern (list_accounts, get_account_context, check_readiness, triage_issue, draft_ticket, draft_followup, validate_draft). friction_digest breaks the pattern as a noun_noun name, a minor deviation but still readable.
Eight tools is well-scoped for a customer-success copilot, covering listing, diagnosis, drafting, validation and aggregation without redundancy. Each tool earns its place in a coherent pipeline.
The surface covers the read/diagnose/draft/validate lifecycle for account management well. Gaps are intentional (no submit/send, no contact-history update), but there is no way to mutate records, which could limit some workflows.
Maintenance
Related MCP Connectors
Evidence-readiness MCP server: validate, audit, and score briefs, memos, and evidence packs.
Collision-first MCP diagnostics for MCP, API, webhook and agent failures. Returns structured evidence, bounded repair guidance, agent compatibility checks and safe recovery routing.
Remote MCP for A2A failure replay MCP, structured receipts, audit logs, and reviewer-ready evidence.
Tenant-scoped evidence intake and controlled AI context over MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTracks MCP server behavior from agent-reported interactions. Provides trust scores, behavioral baselines, anomaly detection, and compliance audit exports for EU AI Act and Singapore IMDA frameworks.10 npm2MIT
- AlicenseAqualityCmaintenanceRead-only MCP tools for coding agents to audit deployment targets, detect fabricated code, review backlog, database schema, analytics, ML models, architecture docs, and decision lenses.1110 npmMIT
- AlicenseNot gradedqualityAmaintenanceA self-hosted work dashboard for AI agent teams, where agents create and manage tickets through MCP tools and humans review an awaiting-human queue backed by an append-only event log. Enables ticket lifecycle management and evidence-based provenance tracking.MIT
- FlicenseNot gradedqualityCmaintenanceProvides read-only MCP tools to diagnose customer billing disputes by analyzing billing records, identifying contradictions, citing evidence, and scoring confidence to auto-resolve or escalate.-