Skip to main content
Glama
chaoz23

charactercheck-mcp

by chaoz23

CharacterCheck

Agents start here → SKILL.md — when to call this, worked examples, MUST/MUST NOTs. Family contract: FAMILY.md.

CharacterCheck is an experimental, read-only compiler for selected D&D Beyond character-sheet fields. It turns a public share, saved character-service JSON, or versioned snapshot into deterministic mechanical context with provenance and named findings.

Current release: 0.7.0. Pin charactercheck==0.7.0 when installation must be reproducible. Verify the installed package version and each field's trust state; a version string alone is not proof that a value is supported.

It is not a complete or rules-authoritative character validator. Its output is not encounter, world, or session state and does not prove that an action is legal. Unknown upstream fields and unsupported restrictions can affect results; read the trust and finding data before using a value.

Run 0.7.0 offline

Python 3.9 or newer is required. The runtime has no third-party dependencies.

git clone https://github.com/chaoz23/charactercheck
cd charactercheck
python3 -m charactercheck selftest
python3 -m charactercheck derive examples/sample-character.json --brief

The bundled example is project-authored synthetic data. The smoke test checks this checkout and selected derivations; it is not evidence of complete D&D rules correctness.

Install the published package into a virtual environment for the console entry points:

python3 -m venv .venv
.venv/bin/python -m pip install charactercheck==0.7.0
.venv/bin/charactercheck derive examples/sample-character.json --brief

The direct python3 -m charactercheck path from a clone has no runtime dependency install. An editable pip install may bootstrap the setuptools build frontend if the environment does not already provide it. See MIGRATING.md before comparing 0.7.0 output or MCP surfaces with 0.6.x.

For an explicitly public character:

python3 -m charactercheck derive https://www.dndbeyond.com/characters/<id>

Public sharing permits retrieval at that moment; it does not establish consent for publication, recurring tests, persistence, model training, or reuse of persona and third-party narrative content.

CharacterCheck requests no credentials. For a private sheet, use an authorized saved character-service JSON file through the local CLI or library; do not pass cookies, tokens, or session data.

Related MCP server: 5eMCP

Product and authority boundary

CharacterCheck currently supports mechanical, read-only preparation for a human or AI-controlled DM, PC, or NPC. It observes a character source and emits context or reconciliation candidates. It exposes no mutation tools and does not become the authority for HP, conditions, concentration, expended resources, equipment declarations, DM rulings, encounter state, or world state.

The human principal remains responsible for access and use. An AI actor must not infer permission, role, or visibility from sheet contents or a tool argument. Where a value is marked confirm, unsupported, unknown, or invalid, the agent should ask the named human authority or decline to use the value. Manual play without CharacterCheck remains the fallback.

Ecosystem and calculation boundary

CharacterCheck is being developed as a versioned D&D Beyond-to-agent compiler and conformance facade, not a new complete 5e rules engine. The strict source/snapshot/privacy/trust layer remains local. Adapter vocabulary is seeded from a pinned offline DDB config registry that was independently observed and cross-checked against the MIT-licensed DDB Importer fallback. The production runtime never fetches that config endpoint. The distributed registry is a purpose-limited allowlist for current evaluator branches—not a copy of DDB's full configuration or third-party catalog vocabulary.

Registry membership establishes only that an upstream ID/name was observed; it does not prove that CharacterCheck implements its mechanics. Bounded unknown IDs are retained as opaque adapter evidence, fixed semantic-gap codes prevent default calculations, and unsafe formula/property prose is omitted. Current weapon proficiency/hand state and unimplemented property semantics therefore remain explicitly unsupported even when a provisional attack line can be rendered.

The next mechanics work is a differential conformance spike using exact SRD revisions, narrow MIT-compatible DDB Importer evidence, and Foundry dnd5e as a versioned model/behavior oracle. DDB/displayed and third-party calculated values are attributed claims, not unquestionable truth; disagreement must become a non-trusted conflict. See ECOSYSTEM_CONFORMANCE.md SOURCE_FIELD_ROUTING.md, and THIRD_PARTY_NOTICES.md.

The observed DDB service/config surfaces remain undocumented and unsupported as public APIs. Their technical availability does not grant commercial access, content rights, stability, or consent. A commercial build needs a licensed or counsel-approved input/update path and should prefer an authorized user/host export until then.

Inputs

The input parser accepts exactly:

  • a positive 1–20 digit character ID with no leading zero;

  • an HTTPS URL on dndbeyond.com or www.dndbeyond.com whose path is exactly /characters/<id>;

  • a direct local regular JSON file, when the calling surface permits files; or

  • a CharacterSnapshotV1 JSON file.

Local symbolic links are rejected. Missing paths are not reinterpreted as IDs. Raw local character files and HTTP responses are bounded to 8 MiB; a local CharacterSnapshotV1 envelope may be up to 16 MiB so a maximum-size filtered source can round-trip with its metadata. JSON also has depth, node, string, collection, inventory, modifier, and container-traversal limits.

Commands

Command

Current contract

derive <ref>

Selected derived fields, provenance, findings, and trust routing

derive <ref> --brief

Deterministic chat-sized summary; still subject to findings

derive <ref> --table-evaluation

Value-free, deterministic, self-attested table.evaluation/1.0 assessment envelope

stance <ref>

Envelope containing stance, canonical assessment, trust, fields, and observation metadata

report <ref>

Canonical field/trust assessments plus findings and identified feature names

qa <ref> [--full]

100-question Coverage Inventory pairing each answer with a closed field state; not a validity score

seatpack <ref>

Privacy-minimized read-only character context

intake <ref>

Pre-session context plus questions and authority boundaries

quiz <ref>

Settlement and sheet-specific finding questions; non-trusted values never become answer keys

snapshot <ref>

Export a versioned, integrity-checked observation

diff <ref> --baseline snapshot.json

Classify supported changes; mark omitted-source comparisons indeterminate

doctor [ref] [--json]

Diagnose runtime/network/source access without echoing the ref

selftest

Offline installation and selected-derivation smoke test

--pipe reads refs from standard input. charactercheck --schema emits the machine-readable CLI contract.

--table-evaluation is also accepted by report. It projects canonical field states and source/policy digests, never character values. Trusted fields count as evaluated; unsupported, unknown, invalid, and non-authority confirmation states fail closed. Mutable player-authority fields are outside the evaluator's scope and become advisories requiring player/session-host reconciliation. The envelope is always self_attested; it is not proof of source identity, freshness, table role, encounter state, or action legality.

Question catalog

The Coverage Inventory pairs each of its 100 answers with the corresponding human-readable D&D 2024 character-sheet lookup question. Structured rows carry number, field, question, state, value, and content_trust. The question catalog is an organizational contract, not an assertion that the supplied JSON Schema's value types or the complete 2024 rules are implemented. An answer remains unusable when its row is unsupported, unknown, or invalid; mutable confirm rows remain player/session-host authority.

The settlement quiz also includes each sheet-specific lint question exactly once. Those prompts never receive an expected answer when their affected family is not trusted. Account identity and roleplay/persona questions remain privacy-omitted from default output.

Snapshots and diff

Capture a baseline and compare a later observation:

python3 -m charactercheck snapshot examples/sample-character.json > baseline.json
python3 -m charactercheck diff examples/sample-character.json --baseline baseline.json

CharacterSnapshotV1 records the adapter, source ID, source-schema fingerprint (which commits to the pinned adapter registry and semantic-gap contract), observation time, engine/rules profile, privacy classification, hashes, coverage, and a snapshot ID. Canonical derived metadata also exposes the adapter-registry fingerprint directly. Account identifiers and linked images are always removed. Persona is excluded by default. Snapshots do not migrate silently; unsupported versions fail with snapshot_schema. Observation times use canonical UTC RFC 3339 (...Z) syntax; they describe caller/source observation order, not a trusted timestamp or proof of freshness.

The hash meanings are intentionally distinct:

  • source.normalized_data_hash is the canonical hash of the default privacy-filtered mechanical character. Projections use it as source_revision; it deliberately excludes persona and every omitted field.

  • source.snapshot_character_hash hashes the exact filtered character stored in the snapshot, so an explicitly persona-inclusive snapshot can differ from the default mechanical revision.

  • meta.snapshot_id covers the complete snapshot envelope except for the ID field itself, including observation metadata, privacy declarations, coverage, and the stored character.

These hashes are deterministic integrity/content identifiers, not signatures, attestations, or proof of source authenticity. A party able to edit a snapshot can recompute unkeyed hashes. Keep baselines in a trusted store and let an authenticated session host bind them to principals and audit history.

Snapshot filtering is closed at the top level and inside supported nested objects. source.coverage contains three booleans: unclassified_top_level_omitted, unclassified_nested_omitted, and semantic_values_omitted, plus a sorted scoped_mechanical_omissions list of canonical family names. It never carries omitted source names or values. Reviewed display/provenance omissions are trust-neutral; reviewed mechanical omissions add source:scoped-fields-omitted and route only listed families to unsupported. The first two booleans have unknown mechanical scope; derive adds the static source:unclassified-fields-omitted finding and routes every mechanical family to unknown. The third records unsafe semantic text removed after a fixed, field-scoped _semanticGaps code was retained; the item-semantic ledger routes the affected family to unsupported without copying the text. The same coverage appears as meta.source_coverage; a downstream view may not turn any incomplete observation back into trusted.

Diff is partial by design. Its coverage.classified list enumerates the coarse source families it can compare. When either of two distinct snapshots says an unclassified or reviewed scoped field or unsafe semantic value was omitted, or either contains private modifier restriction semantics whose text was intentionally omitted, diff emits a $ unsupported_changes record, sets comparison_complete: false, and reports the relationship as indeterminate; an exact identical snapshot can still be unchanged. Distinct snapshots with the same mechanical revision but a named persona/non-mechanical delta are mechanically_unchanged, not unchanged. A changed mechanical revision that reaches no classifier also falls back to $. Diff reports candidates or uncertainty only and never applies a change. For controlled D&D Beyond UI research, use the privacy and reversal gates in the A → B → A human differential protocol.

Trust and canonical field semantics

The trust block routes every known stat family into one exclusive lane:

  • trusted: no detected finding reaches the field within this version's documented coverage. This is not a global safety or rules-validity claim.

  • ask_player: a known ambiguity requires confirmation; asks carries the question.

  • unsupported: observed content has no applicable handler for that family.

  • unknown: observed content has unknown target scope, so derived families fail closed.

  • invalid: a known handler received malformed or contradictory source data.

Each material value also has a canonical assessment in fields with value, state, formula, inputs, sources, rules_profile, findings, confidence, authority, as_of, stale, and sensitivity. Field states are the closed set trusted, confirm, unsupported, unknown, invalid, and not_applicable. Family ask_player maps to field confirm. not_applicable is used when a field does not exist for the character, such as spellcasting fields for a noncaster.

Fail-closed precedence is invalid > unknown > unsupported > confirm > trusted; a projection may preserve or worsen a state, never improve it. Mutable HP, expended slots, resources, and equipment remain player/session-host authority. meta.aggregate_state is the worst material field state and meta.autonomous_ready is currently always false. Values from one observation share the same default-mechanical source_revision and as_of.

Views must preserve or worsen trust; they may not remove a material finding. Consumers should read meta, fields, trust, lint, and unhandled rather than treating an aggregate state as proof of completeness. See SUPPORT.md.

D&D Beyond mechanics represented in report schema v2

  • Builder-choice rows are joined to modifiers by stable mechanical IDs. This recovers selected skills, languages, and standard tools even when D&D Beyond leaves the modifier's isGranted flag false. Builder labels and unselected option catalogs are not retained.

  • Reviewed direct facts now include species walking speed and darkvision, magical-sleep immunity, the closed Charmed-save condition, and numeric spell-group healing bonuses. They retain handler/source provenance and stay non-trusted whenever separate omitted source mechanics reach their family.

  • Armor and shield AC requires equipped: true. combat.weapons remains an inventory view; combat.active_attacks is the action-facing view and includes the 2024 Unarmed Strike. A weapon mastery property is reported separately from masteries_known and is never treated as proof that the character learned it.

  • Ordinary slots_max comes from the pinned SRD progression and slots_current subtracts D&D Beyond's used counters. Source-aware spell_profiles preserve availability and cast modes when the source exposes them.

  • Public anonymous character payloads can omit class/subclass always-prepared spell collections even when the signed-in sheet displays them. CharacterCheck accepts enriched alwaysPreparedSpells, alwaysKnownSpells, and cantrips collections, but does not invent an absent domain/species/feat spell grant from feature prose. That lane remains unsupported until direct source evidence or a pinned edition-aware resolver is available.

  • Death-save counters expose active versus latent; source isStabilized and rules-implied three-success stability remain distinct. Exhaustion is read from D&D Beyond condition id 4, not from any condition that happens to carry a level.

Privacy and untrusted text

Default CLI and MCP mechanical outputs omit D&D Beyond usernames, account identifiers, linked images, appearance, notes, backstory, organizations, and verbatim trait/ideal/bond/flaw text. Custom mechanical names may still be present and should be treated as user-authored content.

The trusted local CLI/library permits explicit persona opt-in for seatpack, intake, or snapshot (--include-persona in the CLI). Returned persona text is bounded, labeled sensitivity: persona and content_trust: untrusted_source_text, and must never be interpreted as instructions. The unauthenticated MCP server exposes neither persona opt-in nor host-local file access. Its former for_dm argument was not authorization and is not a role boundary. In trusted local seatpack/intake calls, --for-dm replaces all duplicated player-authority live values—current HP/slots, stance, resources, and inventory—with an explicit marker; it does not grant DM access.

CharacterCheck has no hosted service, account database, telemetry, cache, or server-side persistence in this repository. The caller controls exported files, logs, model transfer, and deletion. See PRIVACY.md and SECURITY.md.

Exit and error contract

Exit status is command-specific:

Command

0

1

2

3

derive, report

no lint or unhandled record

lint, with no unhandled record

one or more unhandled records, including unknown/invalid/unsupported states

structured input, retrieval, validation, or internal failure

diff

complete comparison with no detected change

any named change or an indeterminate omitted-source/restriction comparison

structured input, snapshot, retrieval, or internal failure

stance, qa, snapshot, quiz, seatpack, intake

projection emitted; inspect embedded fields/findings

structured input, retrieval, validation, or internal failure

selftest

smoke test passed

smoke test failed

doctor

all checks passed

at least one diagnostic check failed

With explicit --table-evaluation, the shared contract's exit codes apply: 0 checked clean, 1 complete with advisories/findings, and 2 incomplete, unsupported, invalid, or internal error. Native command behavior is unchanged when the flag is absent. --brief and --table-evaluation are mutually exclusive.

The CLI rejects every unsupported command/flag combination with structured bad_flag exit 2; notably --for-dm is valid only for seatpack and intake. Missing arguments, unknown commands/options, and diff without --baseline use argparse's plain-text usage error and exit 2. An exit 0 from a projection does not imply that every canonical field is trusted or that autonomous use is safe.

Recognized runtime/input failures return structured error, message, action, retryable, and exit_code fields without serializing the ref, local path, source value, or raw exception detail. Unexpected process-boundary failures return internal_error plus a correlation ID and log only that ID and the exception class. Library callers receive typed CharacterCheckError instances.

The package-level library surface is deliberately canonical: derive(ref) and stance(ref) retain trust/coverage context. fetch(ref) returns a plain privacy-filtered character only when no omission-coverage signal would be lost; otherwise it raises typed source_coverage. The raw arithmetic workspace builder is internal and is not exported from charactercheck. Do not compose a plain fetched dict into a new derivation when the source reports schema drift; use derive, snapshot, or another canonical ref-based view.

MCP

Run python3 -m charactercheck.mcp from the checkout (or charactercheck-mcp after installing that checkout) over stdio. It exposes derive, stance, qa, diff, snapshot, seatpack, quiz, report, intake, selftest, and doctor. It is read-only, accepts public D&D Beyond references rather than server-local paths, omits persona, and treats mutable player state conservatively. It does not authenticate a human principal or enforce table roles; a trusted host must provide those capabilities before active play.

The stdio server implements MCP protocol 2025-11-25, accepts at most an 8-MiB request line, and emits at most a 4-MiB JSON-RPC response. Tool-domain failures return isError: true with the structured error contract. Successful tool data is in structuredContent; the text block is deliberately a short generic notice instead of a duplicate of the character object, reducing privacy exposure and context use for clients that support structured results.

Development and CI

python3 -m unittest discover -s tests -v

CI's product tests and installed-wheel runtime smokes use only local synthetic fixtures or mocked network boundaries, with HTTP(S) routed to a closed local port so an accidental character-service request fails. GitHub Actions checkout/setup and installation of the packaging frontend still require their normal GitHub/PyPI bootstrap access, so the workflow as a whole is not an air-gapped build. No live player character is a permanent test or advertised example. See CHANGELOG.md and MIGRATING.md for compatibility notes.

Credits and marks

Schema semantics for the D&D Beyond character-service payload were partly informed by reading MrPrimate/ddb-importer (MIT). The initial adapter registry was independently observed and cross-checked against its fallback registry; narrow mapping facts and the snapshot/fallback design were adapted with attribution. See NOTICE and THIRD_PARTY_NOTICES.md.

D&D Beyond and Dungeons & Dragons are trademarks of Wizards of the Coast. CharacterCheck is an unofficial, independent project and is not endorsed by or affiliated with Wizards of the Coast.

mcp-name: io.github.chaoz23/charactercheck

Available Tools

11 tools
deriveA
Read-only

Compile selected D&D Beyond character fields into deterministic values, canonical trust states, provenance, unsupported/unknown findings, and lint. This is partial read-only context, not complete rules validation. Input: exact public DDB character URL or id.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesDDB character URL or id

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Despite readOnlyHint=true already covering safety, the description adds 'deterministic' and 'unsupported/unknown findings,' which disclose output behavior beyond the annotation. It also clarifies the partial scope beyond any annotation info.

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 extremely concise, using only two sentences to convey purpose, scope, and input requirements. Every phrase adds value with no filler or repetition.

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

Completeness5/5

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

For a single-parameter read-only tool with an output schema, the description covers the necessary context: what it does, its scope, and input format. The output schema handles return value details, so the description is complete for its complexity.

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

Parameters4/5

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

Input schema already describes 'ref' as a DDB URL or id at 100% coverage, but the description adds 'exact public' as a constraint not present in the schema. This extra semantic detail helps the agent understand acceptable inputs.

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 compiles selected character fields into specific outputs (deterministic values, trust states, provenance, lint). It includes a scoping note about partial read-only context, which differentiates it from full rules validation, though it does not explicitly distinguish from sibling tools.

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 implies usage context by stating 'partial read-only context, not complete rules validation,' suggesting it is for lighter checks rather than full validation. It does not explicitly name alternatives or state when-not-to-use, so guidance is implied rather than explicit.

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

diffA
Read-only

Classify the supported subset of changes between a supplied CharacterSnapshotV1 object and a freshly observed public character. No mutation is applied and unclassified changes are named.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
baselineYes

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?

Beyond the annotations (readOnlyHint, destructiveHint), the description adds behavioral details: 'No mutation is applied' reinforces the read-only nature but also explains the output behavior 'unclassified changes are named.' The phrase 'supported subset' discloses a limitation, which is valuable context not captured by annotations.

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 a single, tightly worded sentence. It front-loads the action ('Classify') and immediately specifies the scope, with no unnecessary words or repetition.

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 the annotations and presence of an output schema, the description is largely complete for understanding the tool's core function. It covers the input concept, the behavior, and a key limitation. However, the lack of explicit parameter mapping and any mention of error scenarios or prerequisites leaves minor gaps, so it does not earn a 5.

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?

With 0% schema_description_coverage, the description must compensate by explaining the parameters. It mentions a 'supplied CharacterSnapshotV1 object' and a 'freshly observed public character,' but does not map these to the actual parameter names 'ref' and 'baseline.' This leaves ambiguity about which parameter is which, especially since 'ref' is a string and 'baseline' is an object.

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 uses a specific verb 'Classify' and a precise resource: 'changes between a supplied CharacterSnapshotV1 object and a freshly observed public character.' This clearly distinguishes it from sibling tools like 'snapshot' or 'derive' by focusing on difference classification rather than creation or derivation.

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 implies usage context—when you need to classify changes between a saved snapshot and a current public character—but it does not explicitly state when to choose this tool over alternatives or provide exclusion criteria. Sibling tool names are present but not referenced.

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

doctorA
Read-only

Diagnose why it is not working: python, DNS, outbound HTTPS, and (with a ref) reachability of that character. Each check reports PASS/FAIL and the first failure carries the remedy.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already convey read-only and non-destructive behavior. The description adds valuable behavioral details: each check reports PASS/FAIL, the first failure carries a remedy, and providing a ref enables an additional reachability check. This goes beyond the annotations without contradicting them.

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 a single, front-loaded sentence that lists all checks and the output behavior without unnecessary words. It is concise and structured effectively for quick understanding.

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

Completeness5/5

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

Given the tool's moderate complexity, the presence of an output schema, and annotations declaring read-only behavior, the description is complete. It covers the full scope of checks, the PASS/FAIL output format, and the remedy behavior, leaving no significant gaps.

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 one optional 'ref' parameter with no description (0% coverage). The description adds meaning by stating that 'with a ref' reachability of that character is checked, but it does not fully specify the expected format or what 'ref' refers to. Partial compensation for low schema coverage warrants a 3.

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 diagnoses why something is not working, listing specific checks (python, DNS, outbound HTTPS, and reachability of a character with a ref). This distinguishes it from sibling tools by specifying exact diagnostic resources and implied use case.

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 implies when to use it (when something is not working in these specific areas) but does not explicitly mention alternatives or when not to use it. It provides clear context without exclusions, which fits 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.

intakeC
Read-only

One pre-session packet: supported-coverage state, the exact questions to resolve before dice (each with the family it unblocks), unsupported content, the fields that are the player's to declare, and a baseline-snapshot hint.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about the packet contents (e.g., supported-coverage state, questions to resolve, player-declared fields), which helps the agent understand the tool's output. However, it does not explain behavioral aspects like whether a valid 'ref' is required for existing sessions.

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

Conciseness3/5

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

The description is a single sentence with a colon-separated list, making it compact but dense. It uses unexplained jargon like 'supported-coverage state' and 'baseline-snapshot hint', which reduces readability. It is not front-loaded with the most essential information and does not clearly state what the tool does.

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?

The tool has one required parameter that is completely undocumented, and the description gives no clue about its purpose. It also lacks usage context and sibling differentiation. While an output schema exists, the description still fails to explain the input, making the tool incomplete for an agent to invoke correctly.

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 schema has one required parameter 'ref' with no description, and schema description coverage is 0%. The description does not mention 'ref' at all, so the agent has no idea what value to provide. With zero compensation from the description, this is a critical gap.

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

Purpose3/5

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

The description lists the contents of a 'pre-session packet' but lacks an explicit verb like 'generates' or 'returns'. It is specific about the resource but does not clearly distinguish itself from siblings like 'snapshot' or 'report' that might also provide state summaries.

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 phrase 'pre-session' implies use before a session, but the description gives no explicit guidance on when to use this tool versus alternatives. No exclusions or alternative tools are mentioned, leaving the agent to infer the appropriate context.

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

qaB
Read-only

Run the 100-question extraction Coverage Inventory. Every answer carries its question and closed trust state; this is not a validity score.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
fullNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, non-destructive, and open-world. The description adds behavioral context by stating that each answer carries its question and a 'closed trust state' and that the output is not a validity score. This goes beyond the annotations and helps the agent understand the output semantics, though it does not address prerequisites or side effects.

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 command and immediately followed by output clarification. Every word contributes meaning, with no redundant or filler content. 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?

The presence of an output schema covers return values, but the description lacks parameter semantics and provides minimal context for the domain-specific 'Coverage Inventory'. An agent would need additional information about what inputs are required and when this tool is appropriate, making the description incomplete despite the concise structure.

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 input schema includes two parameters ('ref' and 'full') with no descriptions, and the schema description coverage is 0%. The tool description does not mention either parameter, leaving the agent with no information about what 'ref' refers to or what 'full' controls. This is a critical gap for correct invocation.

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 a specific action ('Run') and a specific resource ('the 100-question extraction Coverage Inventory'), and it clarifies that the output is not a validity score. However, the term 'Coverage Inventory' is undefined and the description does not explicitly distinguish this tool from siblings like 'quiz' or 'report', so it falls short of full clarity.

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. The phrase 'this is not a validity score' hints at a distinction from something else, but it does not name an alternative or explain under what conditions this tool should be chosen. Without this, an agent cannot reliably decide between this and sibling tools.

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

quizB
Read-only

Read-only settlement and sheet-specific finding prompts. Expected answers exist only for canonical trusted fields; mutable or uncertain fields remain null.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior4/5

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

The description adds value beyond the annotations by disclosing that 'expected answers exist only for canonical trusted fields; mutable or uncertain fields remain null.' This provides insight into output behavior and field handling that the annotations (readOnlyHint, openWorldHint) do not fully capture.

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 concise, consisting of two short sentences that each convey meaningful information. It is front-loaded with the primary purpose and adds a critical behavioral detail without any redundant or unnecessary wording.

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?

While the output schema exists and annotations are present, the description fails to explain the 'ref' parameter or provide usage context. For a tool with a single required parameter and zero schema coverage, the description leaves significant gaps in understanding how to invoke it correctly.

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 input schema contains one parameter 'ref' with no description, and schema description coverage is 0%. The description does not mention 'ref' or explain its meaning, format, or possible values, leaving the agent without necessary parameter semantics.

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 providing 'settlement and sheet-specific finding prompts' in a 'read-only' manner, which conveys its purpose. However, it lacks an explicit verb like 'returns' or 'provides,' and does not distinguish itself from sibling tools beyond the topic.

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?

There is no explicit guidance on when to use this tool versus alternatives. The description only states what the tool is, without mentioning situations where it should or should not be used, nor any reference to sibling tools.

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

reportC
Read-only

Canonical trust and field assessments plus unhandled and lint findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior3/5

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

Annotations already declare read-only and open-world behavior, which the description doesn't contradict. The description adds the report's content categories, but terms like 'canonical trust' and 'field assessments' remain undefined. It doesn't disclose output format or other behavioral nuances, but with annotations covering safety, this is a modest contribution.

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

Conciseness3/5

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

The description is a single short sentence with no unnecessary words, so there is no fluff. However, it is under-specified rather than appropriately concise—it omits critical details such as the action the tool performs and the meaning of the 'ref' parameter, making the brevity a disadvantage.

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?

Even though an output schema exists, the description is too sparse to understand the tool's purpose or input. With one required parameter that is completely unexplained and a vague behavioral description, the agent cannot confidently select or invoke the tool. The description is not complete enough 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.

Parameters1/5

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

The only required parameter 'ref' is a plain string with no description in the schema, and the tool description provides zero information about what it refers to (e.g., a repository ref, a file reference, or an ID). With 0% schema description coverage, the description fails to compensate, leaving the agent completely in the dark about the parameter's meaning.

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

Purpose2/5

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

The description is a noun phrase listing content categories ('Canonical trust and field assessments plus unhandled and lint findings') without a verb or explicit action. It doesn't clearly state that the tool produces a report or any other operation, and it doesn't distinguish this from sibling tools like stance or qa. This is vague rather than a complete tautology.

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?

There is no guidance on when to use this tool versus alternatives. The description mentions no scenarios, prerequisites, or exclusions, and the sibling tools are not referenced. An agent gets no information about when 'report' is the appropriate choice.

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

seatpackC
Read-only

Privacy-minimized read-only character context. Persona is never exposed; mutable player-authority state is marked rather than treated as host truth.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, but the description adds valuable context: the persona is never exposed, and mutable player-authority state is marked rather than trusted. This goes beyond the annotations and provides useful behavioral disclosure. No contradiction with annotations.

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 totaling about 22 words, with no redundant phrasing. It is compact and front-loaded with the 'privacy-minimized read-only' qualifier, though the first sentence's vagueness slightly detracts from immediate comprehension.

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 lacks essential context: it does not explain the input parameter 'ref', provide usage scenarios, or relate to sibling tools. The minimal description is insufficient for an agent to confidently invoke the tool correctly.

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 schema has one required parameter 'ref' with 0% description coverage. The tool description does not explain what 'ref' means, leaving the agent to guess whether it is a character ID, a reference, or something else. The description fails to compensate for the schema's lack of detail.

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

Purpose3/5

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

The description uses a noun phrase 'character context' without a clear verb, making it ambiguous whether the tool fetches, lists, or computes context. It emphasizes privacy and read-only but does not distinguish itself from sibling tools like 'snapshot' or 'derive'.

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?

No explicit guidance on when to use this tool versus alternatives. It implies use for character context needs but does not state when NOT to use it or reference sibling tools like 'qa' or 'stance'.

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

selftestA
Read-onlyIdempotent

Check the offline installation against a bundled sample character — no network, no D&D Beyond account, no character required. Run this first when bootstrapping: it separates 'the tool is broken' from 'I cannot reach that character'.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only and idempotent. The description adds context: no network or D&D Beyond account needed, and it operates against a bundled sample. This enriches the safety profile beyond the annotations without contradicting them.

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: the first defines the action and constraints, the second provides usage sequencing. No redundant words.

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

Completeness5/5

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

For a parameterless tool with a bundled-sample check and rich annotations, the description covers the essential context: purpose, prerequisites, and diagnostic role. The output schema handles return-value details.

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

Parameters4/5

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

The tool has zero parameters; the baseline for 0 params is 4. The description mentions the bundled sample character, which provides context on what the check uses, but no parameter semantics are needed.

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 explicitly states the tool's function: 'Check the offline installation against a bundled sample character.' It clarifies scope (offline, no network/account/character) and differentiates it from tools that require external resources, making the purpose distinct.

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 when-to-use guidance: 'Run this first when bootstrapping' and provides a decision heuristic ('separates the tool is broken from I cannot reach that character'). It does not name alternative sibling tools explicitly but implies prerequisites are unnecessary.

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

snapshotA
Read-only

Observe a public character once and return a privacy-filtered, versioned CharacterSnapshotV1. Account identifiers, linked images, and persona are omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

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?

The description goes beyond annotations by specifying which fields are omitted (account identifiers, linked images, persona) and highlighting the versioned nature of the snapshot. This useful context is not present in the annotations, and there is no contradiction.

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 main action, and contains no redundant information. Every word adds value.

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 single-parameter tool with output schema and rich annotations, the description covers the key return behavior and privacy filtering well. However, the unclear 'ref' parameter and lack of usage guidance leave minor gaps, preventing a perfect score.

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 only parameter 'ref' is completely undocumented in the schema, and the description does not explain what 'ref' refers to. With 0% schema coverage and no compensating description, the agent lacks essential parameter semantics.

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 identifies the action ('Observe a public character once') and the return type ('CharacterSnapshotV1'), with specific details about privacy filtering and omitted fields. This distinguishes it from sibling tools like derive or diff, making its purpose unambiguous.

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 implies a read-only, one-time snapshot use case but does not explicitly compare with alternatives or state when not to use. It lacks explicit alternatives or exclusions, so the agent must infer when to choose this over siblings.

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

stanceC
Read-only

Pre-combat context with canonical assessment. Observed hand/equipment state requires player or session-host confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive behavior. The description adds context about pre-combat and a requirement for confirmation from a player or session-host, which gives some behavioral insight beyond the annotations. However, it remains ambiguous whether the tool itself performs the confirmation or just reports the need for it.

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

Conciseness3/5

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

The description is short, consisting of two sentences, but the first is an awkward noun phrase that sacrifices clarity for brevity. It is not efficiently structured, though there is no excess wordiness.

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 and annotations, the description leaves the tool's core purpose ambiguous and fails to explain the 'ref' parameter. The pre-combat context is a hint but not enough to understand the tool's operation or invocation correctly.

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 schema has one parameter 'ref' with no description, and the description provides no explanation of the parameter. Schema description coverage is 0%, and the description does not compensate at all, leaving the agent without any guidance on what 'ref' refers to.

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

Purpose2/5

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

The description lacks an explicit verb or action. "Pre-combat context with canonical assessment" is a noun phrase that does not clearly state what the tool does. It is vague and does not distinguish the tool from siblings like derive, qa, or report.

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?

There is no explicit guidance on when to use this tool versus alternatives. The second sentence mentions a domain requirement (confirmation of hand/equipment state) but does not connect it to the tool's usage or mention any exclusions or alternative tools.

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. Dates show when Glama detected each change.

  1. 11 tool updatesv0.6.2
    • First observedderive
    • First observeddiff
    • First observeddoctor
    • First observedintake
    • First observedqa
    • First observedquiz
    • First observedreport
    • First observedseatpack
    • First observedselftest
    • First observedsnapshot
    • First observedstance

TDQS

B3/5.0
Disambiguation3/5

Several tools (derive, report, stance, seatpack, intake) all produce some form of character assessment, but their descriptions specify distinct focuses (deterministic values, trust reports, pre-combat context, privacy-minimized context, pre-session prep). qa and quiz both involve questions but differ in coverage inventory vs. finding prompts. With detailed descriptions an agent can likely disambiguate, but the boundaries are not immediately obvious.

Naming Consistency2/5

Tool names are all lowercase single words, but mix verbs (derive, diff), nouns (stance, report), and cryptic compounds (seatpack, selftest) without a consistent verb_noun pattern. This makes it hard to predict what a tool does from its name. There is no discoverable naming scheme.

Tool Count4/5

At 11 tools, the count is within the reasonable 3-15 band, but includes two maintenance/diagnostic tools (selftest, doctor) that seem tangential to the core character-checking purpose. Slightly heavy, but each character-focused tool earns its place.

Completeness4/5

For a read-only character validation domain, the set covers observation (snapshot), comparison (diff), assessment (derive, report), context (stance, seatpack, quiz, intake), and self-testing (selftest, doctor). Minor gaps: no batch processing or field-level catalog, but core workflows are complete.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables D&D 5e game masters and players to access complete game reference data, search spells, monsters, items, and calculate encounter difficulty, all through natural language.
    6
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to manage D&D Beyond characters, access campaigns, and look up spells, monsters, items, and more through a reverse-engineered API.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chaoz23/charactercheck'

If you have feedback or need assistance with the MCP directory API, please join our Discord server