Skip to main content
Glama

asistonto-mcp

An MCP server that teaches any AI assistant to build question packs for asistonto, a live meeting copilot.

asistonto listens to a meeting and, the moment a question it was told to watch for is actually being discussed, it surfaces that question. What it watches is a pack. Writing a good one used to be expert work: the questions have to be stated in a particular four-part format, and each of those parts belongs in a different field because of what was measured about retrieval — get that wrong and the pack loads fine and then stays dark all meeting.

This server hands that expertise to Claude, ChatGPT, Claude Code, Codex, or anything else that speaks MCP. You paste your meeting notes; the assistant writes the pack; the pack uploads to asistonto unchanged.


Install

There is nothing to install by hand. Every client below runs the server through uvx, which fetches and launches it on demand. You need uv and Python 3.12+.

The package is not on PyPI yet, so uvx asistonto-mcp will not find it. Install it from the repository instead — this is the working command, and it is the one used in every block below:

uvx --from git+https://github.com/R0DR0X/asistonto-mcp asistonto-mcp

That runs the server on stdio and waits, which is what an MCP client wants and what looks like a hang in a terminal. Ctrl-C to leave. When PyPI publishing happens the plain uvx asistonto-mcp will start working and every block here gets shorter by three words; until then, use the --from form.

Claude Code

claude mcp add asistonto -- uvx --from git+https://github.com/R0DR0X/asistonto-mcp asistonto-mcp

Or, for every project on this machine rather than one:

claude mcp add --scope user asistonto -- uvx --from git+https://github.com/R0DR0X/asistonto-mcp asistonto-mcp

Check it with claude mcp list; the line should end in ✔ Connected. To upload packs you also need an API token — see Getting a pack into asistonto — which you can hand to the server at registration time:

claude mcp add asistonto --env ASISTONTO_API_TOKEN=asist_... -- uvx --from git+https://github.com/R0DR0X/asistonto-mcp asistonto-mcp

Claude Desktop

claude_desktop_config.json — macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json.

{
  "mcpServers": {
    "asistonto": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/R0DR0X/asistonto-mcp",
        "asistonto-mcp"
      ],
      "env": { "ASISTONTO_API_TOKEN": "asist_..." }
    }
  }
}

Restart Claude Desktop afterwards. A desktop app has no shell to export a variable in, so the token goes in env — which makes that config file a file holding a secret. Keep it as private as the token itself, and leave env out entirely if you only want to author packs and not upload them.

Cursor, Windsurf, and anything else taking the generic block

The same mcpServers object, in whichever file that client reads (.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, …):

{
  "mcpServers": {
    "asistonto": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/R0DR0X/asistonto-mcp",
        "asistonto-mcp"
      ],
      "env": {}
    }
  }
}

Codex

Codex keeps its configuration in ~/.codex/config.toml — TOML, not JSON:

[mcp_servers.asistonto]
command = "uvx"
args = ["--from", "git+https://github.com/R0DR0X/asistonto-mcp", "asistonto-mcp"]

[mcp_servers.asistonto.env]
ASISTONTO_API_TOKEN = "asist_..."

From a checkout

git clone https://github.com/R0DR0X/asistonto-mcp.git
uvx --from ./asistonto-mcp asistonto-mcp

Related MCP server: Office-PowerPoint-MCP

What it gives the assistant

Tools

tool

what it does

pack_authoring_guide

the guidance below, for clients that cannot read resources

compose_question

assembles one question from the four parts, each into the right field

parse_meeting_notes

reads an existing corpus document, in either format asistonto uses

check_paraphrases

lints phrasings: too few, keywords, document vocabulary, sibling collisions

validate_pack

everything that would fail to load, plus everything that would fail silently

write_pack

writes brief.json, paraphrases.json, background.txt, labels.json

read_pack

loads an existing pack the way the live server does, and validates it

upload_pack

sends a pack to asistonto over HTTP, so a session can pick it

render_question_document

writes the questions back out as markdown a person can correct

pack_size_floor

how many questions a pack needs before anything in it can fire

Promptsbuild_pack_for_meeting, write_paraphrases, formulate_question, review_pack.

Resourcesasistonto://guide/pack-format, asistonto://guide/four-part-questions, asistonto://guide/paraphrases, asistonto://guide/calibration, asistonto://guide/workflow, asistonto://guide/publishing, asistonto://guide/labels, asistonto://example/pack, asistonto://schema/brief.json.

The resources matter as much as the tools. An assistant that reads the paraphrase guidance before writing phrasings produces a materially better pack than one that only calls functions — the quality lives in judgement, and the judgement is written down there.


Worked example, end to end

1. Ask. In any client with the server registered:

Build me an asistonto pack for Tuesday's meeting with the warehouse lead about the new label. Here are my notes: (paste). The spec says the label carries the lot code, but the picking screen we saw last week only shows the pallet id, and nobody has said which one the scanner reads.

2. The assistant states each question in four parts and calls compose_question:

part

content

1 — where it came from

ETIQUETAS_v3.md line 41: "la etiqueta lleva el código de lote"

2 — what was observed

the picking screen shown on 12 May displays only the pallet id

3 — the question

when the operator scans at picking, does the code identify the pallet or the lot?

4 — why it matters

the traceability chain hangs off which one is scanned

which becomes one entry of brief.json:

{
  "id": "QC-7",
  "title": "what the scanner reads at picking",
  "priority": "alta",
  "source": "ETIQUETAS_v3.md",
  "line": 41,
  "probes": ["When the operator scans at picking, does the code identify the pallet or the lot?"],
  "people": ["warehouse lead"],
  "rationale": "the traceability chain hangs off which of the two is scanned",
  "blocking": true,
  "context": "ETIQUETAS_v3.md line 41 says the label carries the lot code. The picking screen shown on 12 May displays only the pallet id."
}

The provenance sits in context, which is never indexed — indexing it costs 15 points of recall@1. The question sits in probes, the label in title, and both of those are indexed.

3. Ten paraphrases per question, written from the question alone:

{
  "QC-7": [
    "when they scan at picking, what are they actually reading",
    "the guy with the gun scans the pallet or the box",
    "does the scan tell you which lot it is or just where it is",
    "if two lots sit on the same pallet, how does the scan tell them apart",
    "what comes up on the screen after the beep",
    "can you tell from the scan which batch went out",
    "is the code on the label the same one the system stores",
    "do they scan once per pallet or once per unit",
    "what happens when the label is torn and it does not scan",
    "who decided which code goes on that label"
  ]
}

4. validate_pack, then write_pack. You get a directory:

packs/almacen/
├── brief.json         ← the only file the live loop reads
├── paraphrases.json   ← the editable source, folded into the brief
└── background.txt     ← a PAST meeting, for calibration

write_pack refuses two things outright: a pack that would not load, and a pack too small for anything in it to ever fire. The second refusal is the important one, because that pack loads perfectly and then does nothing (see the three things worth knowing).

5. upload_pack, which puts it where the copilot can see it. That is the next section.


Getting a pack into asistonto

A pack on your disk is not a pack asistonto can use. The copilot runs on a server; the pack has to be sent there over HTTP. That is what upload_pack does.

Once, per person

  1. Get an account. Sign in at https://asistonto.escorpia.com. Sign-in goes through Google, so you need a Google account and you need to be able to reach the panel before any of this works.

  2. Create an API token in the panel. It looks like asist_… and it is shown once — copy it then, not later.

  3. Put it in the environment the MCP server runs in, as ASISTONTO_API_TOKEN. From a shell:

    export ASISTONTO_API_TOKEN=asist_...

    For a GUI client, use the env block shown in its section above.

Running your own asistonto?

Set ASISTONTO_BASE_URL to your instance and everything below points at it instead. That is necessary and not sufficient: POST /packs/<name> is only registered when your instance has sign-in configured, and sign-in there is all-or-nothing. Your server needs all four of

ASISTONTO_PUBLIC_ORIGIN=https://asistonto.example.com
ASISTONTO_OAUTH_CLIENT_ID=...
ASISTONTO_OAUTH_CLIENT_SECRET=...
ASISTONTO_OAUTH_DISCOVERY_URL=https://accounts.google.com/.well-known/openid-configuration

plus ASISTONTO_ALLOWED_ACCOUNTS listing the e-mail addresses allowed to sign in — with any one of the four missing, the whole account system is off, there is no panel to make a token in, and the upload route does not exist. Uploading to such an instance answers upload_not_available (a bare 404 from the server). Your instance also decides how large a body it accepts; the default is 4 MiB.

The server reads the token from the environment and from nowhere else. It is never a tool argument — a tool argument is written into the transcript — and the server never writes it to a file. Do not paste it into a chat.

Per pack

Ask the assistant to upload it, or let it call the tool directly:

upload_pack(directory="packs/almacen")

It sends brief.json, paraphrases.json and background.txt to POST /packs/<name>. The account that uploads a pack owns it.

Then start the meeting

Open https://asistonto.escorpia.com, start a session, and pick the pack by name. Pack names must be letters, digits, dot, dash or underscore, starting with a letter or digit — the server rejects anything else.

When it does not work

what comes back

what happened

what to do

token_missing

$ASISTONTO_API_TOKEN is not set where the server runs

export it, or put it in the client's env block, and restart the client

unauthorized

the token is wrong, expired or revoked

create a new one in the panel and set it again

name_taken

the name is taken on that instance; the message repeats the server's own reason — another account owns it, or an unclaimed pack directory already has that name

choose another name: upload_pack(directory=…, pack="almacen-turno-b")

rejected

the pack is malformed; the message names the question

fix that question, validate_pack, upload again

pack_cannot_fire

the pack is under the size floor and would stay dark

add questions until there are at least 25

pack_too_large

the body is over the instance's cap (4 MiB by default)

shorten background.txt, which is almost always what makes a pack big, or upload without it

connection_reset

the instance hung up while the body was being sent — almost always the same size cap, answered too late to arrive

same as pack_too_large; if the pack is small, retry and then check ASISTONTO_BASE_URL

upload_not_available

that instance has no upload route: a self-hosted asistonto without the four OAuth variables set

see Running your own asistonto?

unreachable

no network, or the wrong ASISTONTO_BASE_URL

check both


The three things worth knowing before you start

Provenance is never a paraphrase. Parts 1 and 2 describe documents; paraphrases describe speech. Measured with paraphrases already indexed, adding the provenance took recall@1 from 71.1% down to 55.6%. Worse, writing paraphrases while reading the provenance pulls document vocabulary — codes, annex numbers, file names — into phrasings that nobody ever says.

Paraphrases must separate siblings, not reword them. Six ways of saying the same thing all resemble the neighbouring question equally, and 70% of measured top-1 errors landed on a sibling of the same block. check_paraphrases flags phrasings that fit the neighbour better than their own question.

A small pack cannot fire at all. The live gate is a z-score over the pack's own scores, so its ceiling is (n-1)/√n. Against the default gate of 4.75 that means at least 25 questions — below it the panel stays dark all meeting and looks exactly like a quiet room. This is why write_pack and upload_pack refuse a pack that small instead of warning about it.

The measurements behind all of this are in the guide resources, which the assistant can read directly.


Development

git clone https://github.com/R0DR0X/asistonto-mcp.git
cd asistonto-mcp
uv venv && uv pip install -e '.[dev]'
uv run pytest

The test suite runs the MCP server over a real client session and asserts that what it writes round-trips through a copy of the product's own loader (tests/test_product_compatibility.py). It never opens a socket: the upload tests replace upload.post_json, the one function in the package that would.

License

MIT.

Available Tools

9 tools
check_paraphrasesA

Lint the paraphrases of one question before they go into a pack: count against the measured curve, phrasings that borrow document vocabulary from the provenance, phrasings that fit a sibling question better, duplicates and keywords.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYes
siblingsNo
paraphrasesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of disclosing behavior. It lists the specific checks (count against measured curve, borrowings from provenance, sibling fit, duplicates, keywords), which is useful. However, it uses domain jargon like 'measured curve' and 'provenance' without elaboration, and doesn't state side effects (though 'lint' implies read-only).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the verb 'lint' and the resource, followed by a list of specific checks. It is appropriately sized for the tool's complexity, though the list is somewhat dense. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 params, nested objects) and that an output schema exists, the description gives a high-level overview but leaves domain-specific terms unexplained (e.g., 'measured curve', 'provenance'). It doesn't describe the output structure, but that's covered by the output schema. Overall, it is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It references all three parameters indirectly: 'one question' (question), 'paraphrases' (paraphrases), and 'sibling question' (siblings). This gives functional context, but it doesn't explain the internal structure of the question object or how siblings are used beyond comparison. Overall, it adds partial meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to 'lint the paraphrases of one question before they go into a pack'. It specifies the resource (paraphrases of a question) and the specific checks performed, which distinguishes it from sibling tools like compose_question or validate_pack.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: 'before they go into a pack' indicates this is a pre-pack quality check. It doesn't explicitly mention alternatives or exclusions, but the context is sufficient for an agent to know when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compose_questionA

Assemble one pack question from the four parts, placing each where the retrieval measurements say it belongs: the heading label and the question are indexed, the provenance and the stakes are not. Returns the question object plus what is still missing from it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
lineNo
titleYes
originNo
peopleNo
sourceNo
stakesNo
priorityNosin_prioridad
questionYes
observationNo
extra_probesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: how parts are placed ('placing each where the retrieval measurements say it belongs'), which parts are indexed versus not, and the return value ('the question object plus what is still missing from it'). This goes beyond a simple action statement, though it omits details on side effects or permissions, which are less critical for a composition tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action, and each sentence earns its place. It includes essential behavioral and return information without redundancy. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the tool is moderately complex with 11 parameters, many of which are unexplained. The description focuses on the four main parts and the compositional logic, but omits guidance on the other parameters, prerequisites, or error conditions. It leaves significant gaps for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 11 parameters and 0% schema description coverage, so the description must compensate by explaining parameter meanings. It only vaguely references 'four parts' without mapping them to specific fields. For instance, it never mentions parameters like 'people', 'observation', or 'priority'. The description provides minimal semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Assemble one pack question from the four parts', clearly identifying the resource (pack question) and the process (assembling based on retrieval measurements). It distinguishes itself from sibling tools like parse_meeting_notes or validate_pack by focusing on composition rather than parsing or validation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when you have the four parts and need to assemble a question according to retrieval measurements. It implies the prerequisite of having those parts, but does not explicitly name alternatives or exclusions. This meets the 'clear context, no exclusions' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pack_authoring_guideA

Read the pack-authoring guidance. Same text as the asistonto:// resources, for clients that cannot read resources. Topics: pack-format, four-part-questions, paraphrases, calibration, workflow, labels, example, all.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoworkflow

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior. It clearly states it is a read operation ('Read') and notes the content source ('Same text as the asistonto:// resources'), but it does not explain behavior for invalid topics, the 'all' topic, or the output format. The description adds some context but leaves several behavioral aspects unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: two sentences, no redundant wording. It front-loads the purpose, then gives the resource equivalence, then the topic list. Every sentence serves a purpose, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-guide tool with an output schema, the description covers the core aspects: what it does, when to use it, and the available topics. The main gap is not specifying behavior for the 'all' topic or error handling, but given the low complexity and presence of an output schema, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only a bare 'topic' property with no description or enum, so the description's topic list ('pack-format, four-part-questions, paraphrases, calibration, workflow, labels, example, all') is essential and fully compensates for the 0% schema coverage. It effectively enumerates valid values and clarifies the default from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Read the pack-authoring guidance') and clearly identifies the resource. It distinguishes itself from sibling tools like read_pack by focusing on authoring guidance rather than pack content, and the topic list adds clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context: 'for clients that cannot read resources,' which tells when to use this tool. The listed topics imply the scope, but it does not explicitly name alternatives or exclusions. The condition alone provides strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pack_size_floorA

How many questions a pack needs before anything in it can fire, for a given gate. The live gate is a z-score over the pack's own scores, so a small pack has a ceiling below it and stays dark.

ParametersJSON Schema
NameRequiredDescriptionDefault
z_thresholdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses the key behavioral trait that the gate is a z-score over the pack's own scores, and that a small pack has a ceiling below it and stays dark. This adds meaningful context about the internal logic beyond what the tool name alone conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler, front-loading the core concept. The phrase 'stays dark' is slightly informal but does not add unnecessary length. Every sentence contributes to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is an output schema and only one optional parameter, the description provides sufficient context about the tool's purpose and underlying logic. It explains why pack size matters and how the gate works. It could be more explicit about z_threshold, but overall it covers the essential aspects for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero description coverage for the parameter z_threshold, and the tool description does not explicitly explain what this parameter represents or how it affects the floor. It only refers to 'a given gate,' which is a vague hint. The default value of 4.75 is also not mentioned, leaving the parameter semantics largely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool determines the minimum pack size needed before any question can fire, given a gate. It distinguishes itself from sibling tools like validate_pack or read_pack by focusing on this specific size floor calculation, though it lacks an explicit verb like 'returns' or 'calculates.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the context of the live gate being a z-score and mentions that small packs stay dark, which implies when this tool would be useful. However, it does not explicitly say when to use this tool versus alternatives, nor does it provide any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_meeting_notesA

Parse a corpus document into pack questions. Accepts both shapes the asistonto corpus uses: the four-part blockquote format and the older ### QC-1 <title> headings with numbered sub-questions. Reports which one it read.

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixNoQC
sourceNo
markdownYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It usefully states that it accepts both format shapes and 'reports which one it read,' which is genuine behavioral detail. It does not mention error cases or explicitly reassure non-mutation, but 'parse' is naturally read-only and the output schema covers results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences with no filler. The first sentence states the core purpose, and the second packs format variants and output behavior, making every word count.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the primary input contract and output behavior, and an output schema exists to define return structure. The main gaps are the unexplained optional parameters and lack of error-handling details, but the tool is not overly complex, making this a largely complete description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no descriptions for markdown, prefix, or source, so the description must compensate. It explains the markdown parameter's accepted corpus formats well, and indirectly hints at the prefix parameter via the '### QC-1' example, but it leaves prefix and source underspecified and does not explain their roles or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Parse a corpus document into pack questions,' which clearly names the verb, input, and output. It also enumerates the two accepted input shapes, distinguishing it from sibling authoring, validation, and writing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the appropriate context: use this when you have a corpus document in either supported format that needs conversion to pack questions. However, it does not explicitly discuss when not to use it or compare it with sibling tools like compose_question or write_pack.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_packB

Read a pack from disk the way the live server does, and validate it. Use this to review or extend a pack that already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It states the tool reads 'the way the live server does' and validates, implying non-mutating behavior, but it does not detail what validation involves, error behavior, or whether any files are modified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the action and followed by a clear use case. Every word contributes value, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return values, but the description omits details about the expected pack structure, what validation includes, and how this relates to the sibling validate_pack tool. It is minimally viable but leaves important gaps for a tool with a single parameter and no annotation safety hints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, 'directory', has no schema description (0% coverage) and is not mentioned in the tool description. The description fails to add any meaning about what the directory should contain or how to format the path, leaving the parameter completely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as reading a pack from disk and validating it, with a specific verb and resource. It also provides a use case (review/extend existing packs) that distinguishes it from write_pack, though the overlap with validate_pack introduces slight ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Use this to review or extend a pack that already exists' gives explicit usage context. It does not explicitly mention alternatives like validate_pack, but it provides clear enough direction for when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_question_documentA

Render questions back into the four-part markdown a person can read and correct. Keep it next to the pack: the pack is for the machine, this is for the room.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It only says 'Render' and describes the output format, but does not disclose side effects (e.g., whether it writes files, modifies data, or is read-only), nor does it describe the return value beyond relying on the output schema. This is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with no filler. The first sentence states the core action, and the second adds useful context about its relationship to the pack. Every word earns its place, and it is appropriately front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema, the description provides adequate purpose and usage context. However, it lacks transparency about side effects and parameter details, making it only minimally complete. There are clear gaps that could be filled with a short note on what the output looks like (e.g., 'Returns markdown text') and what format the questions should take.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter 'questions' with 0% description coverage. The description says 'Render questions' but does not explain the structure of the questions array or what fields each object should have. It adds no meaning beyond the parameter name, failing to compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renders questions into a four-part markdown document for human reading and correction. It uses a specific verb 'Render' with a clear resource ('questions') and output format, distinguishing it from siblings like write_pack and read_pack.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context for when to use this tool: it is meant to be kept next to the machine-readable pack, with the phrase 'the pack is for the machine, this is for the room' clarifying it produces a human-facing document. However, it does not explicitly name alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_packA

Validate a pack against the schema the live copilot loads, and against what measurement says will under-perform silently. Errors mean it will not load; warnings mean it will load and then quietly do less than it should.

ParametersJSON Schema
NameRequiredDescriptionDefault
packYes
labelsNo
questionsYes
backgroundNo
paraphrasesNo
z_thresholdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses important behavioral semantics: errors mean the pack will not load, warnings mean it will load but underperform silently. This adds context beyond the schema, though it does not specify mechanics or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action, no redundancy, and every clause adds value. Perfectly concise and structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description omits parameter semantics and usage context relative to siblings. With 6 parameters and no annotations, an agent cannot reliably invoke this tool without external knowledge, making the description incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides zero explanation of parameters such as pack, questions, labels, or z_threshold. This is a significant gap; the description fails to compensate for the undocumented schema, leaving an agent uncertain about what each parameter means.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates a pack against two specific criteria: the schema the live copilot loads and measurement-based silent underperformance. It distinguishes from siblings by focusing on validation rather than reading, writing, or composing packs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the meaning of errors and warnings, which helps users interpret the result and implies when to use the tool (to check pack health before use). However, it does not explicitly mention when to use it versus alternatives like check_paraphrases or pack_authoring_guide, nor provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_packB

Write a pack to a directory: brief.json, paraphrases.json and optionally background.txt and labels.json. Validates first and refuses to write a pack that would fail to load.

ParametersJSON Schema
NameRequiredDescriptionDefault
packYes
fuenteNo
labelsNo
personaNo
directoryYes
overwriteNo
questionsYes
backgroundNo
paraphrasesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adds a key behavioral detail—it validates before writing and refuses invalid packs. However, it omits other behaviors like overwrite semantics or directory creation, leaving significant transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the primary action and resource, with no redundant words. The file list adds specificity without verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, an output schema, and no annotations, this short description is insufficient for correct invocation. It covers purpose and validation behavior, but lacks parameter semantics and edge-case details needed 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description does not explain the 9 input parameters. It indirectly hints at background.txt and labels.json corresponding to optional params, but does not clarify pack, questions, overwrite, or others, providing minimal assistance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Write a pack to a directory') and specifies the output files (brief.json, paraphrases.json, optionally background.txt and labels.json), clearly distinguishing it from siblings like read_pack and validate_pack.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives such as validate_pack or read_pack. The validation behavior is mentioned, but no when-to-use or when-not-to-use guidance is given.

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.

  1. 9 tool updatesv0.1.0
    • First observedcheck_paraphrases
    • First observedcompose_question
    • First observedpack_authoring_guide
    • First observedpack_size_floor
    • First observedparse_meeting_notes
    • First observedread_pack
    • First observedrender_question_document
    • First observedvalidate_pack
    • First observedwrite_pack

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have clearly distinct purposes: parsing notes, composing questions, checking paraphrases, validating packs, rendering documents, and reading/writing packs all target different stages. The only minor overlap is between validate_pack and read_pack, since read_pack also validates, but the descriptions make the distinction clear.

Naming Consistency3/5

The majority of tools follow a verb_noun pattern (compose_question, parse_meeting_notes, validate_pack, write_pack, read_pack), but two exceptions break the convention: pack_authoring_guide and pack_size_floor are noun phrases with no verb. This mixed pattern is readable but not fully consistent.

Tool Count5/5

With 9 tools, the server is well-scoped for its purpose. Each tool covers a distinct step in the pack authoring workflow, and there is no obvious redundancy or bloat.

Completeness4/5

The tool set covers the full authoring lifecycle: guidance, parsing, composing, paraphrasing, validation, rendering, writing, reading, and sizing. Minor gaps exist (no explicit delete or update operation, no batch listing), but write_pack can overwrite packs and the core workflow is complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers