Skip to main content
Glama


Ecosystem

Guard Core is the Python engine. Framework adapters are thin wrappers that translate native request/response types into Guard Core's protocols. The telemetry agents ship security events and metrics to the monitoring backend. Parallel engine implementations exist for Go, PHP, TypeScript (on npm), and Rust (on crates.io) - all ports of the same reference semantics, conformance-tested against the shared adversarial corpus.

Python

Package

Role

PyPI

guard-core

Framework-agnostic security engine

PyPI

guard-agent

Telemetry agent

PyPI

fastapi-guard

FastAPI / Starlette adapter

PyPI

flaskapi-guard

Flask adapter

PyPI

djapi-guard

Django adapter

PyPI

tornadoapi-guard

Tornado adapter

PyPI

Go

Go modules published via GitHub releases. Production-ready.

Package

Role

Release

guard-core-go

Go engine

release

nethttp-guard

net/http adapter

release

gin-guard

Gin adapter

release

echo-guard

Echo (v4) adapter

release

fiber-guard

Fiber (v3) adapter

release

guard-agent-go

Telemetry agent

release

PHP

Published on Packagist under the rennf93 vendor. Production-ready.

Package

Role

Packagist

guard-core-php

PHP engine

Packagist

laravel-guard

Laravel adapter

Packagist

symfony-guard

Symfony adapter

Packagist

psr15-guard

PSR-15 adapter

Packagist

slim-guard

Slim 4 adapter

Packagist

guard-agent-php

Telemetry agent

Packagist

TypeScript / JavaScript

Published under the @guardcore npm scope; source in the guard-core-ts monorepo. Production-ready.

Package

Role

npm

@guardcore/core

Core engine

@guardcore/express

Express adapter

npm

@guardcore/nestjs

NestJS adapter

npm

@guardcore/fastify

Fastify adapter

npm

@guardcore/hono

Hono (edge) adapter

npm

guardagent

Telemetry agent

npm

Rust

Published on crates.io. Production-ready.

Package

Role

crates.io

guard-core-engine

Core engine crate

crates.io

guard-core-rs

Facade crate (consumer entry point)

crates.io

actix-guard-rs

Actix Web adapter

crates.io

axum-guard-rs

Axum adapter

crates.io

tower-guard-rs

Tower adapter

crates.io

rocket-guard-rs

Rocket adapter

crates.io

guard-agent-rs

Telemetry agent

crates.io

AI Coding Agents

Package

Role

PyPI

guard-core-mcp

MCP server: config validation, docs search, detection sandbox

PyPI


Related MCP server: FlowCheck MCP Server

Documentation

📚 Documentation - full technical documentation for this package.

🛡️ Guard Core - the engine's reference documentation.

🤖 Monitoring Agent Integration - monitor your Guard instance with a monitoring agent.


Why

Your agent can already read the docs. What it cannot do is tell you that the redis_failopen in your config is silently doing nothing because the real field is redis_fail_open, or that the flag you are reaching for did not exist until guard-core 3.5.0, or whether a given request would actually be blocked and by which pattern.

This server answers those from the installed package: real pydantic validation, real field metadata, and the real detection engine. It also answers the cross-language questions the libraries cannot answer: which package guards a Gin, Fastify, Laravel or Rocket app, whether it is tagged or still path-dependent, how to wire its telemetry agent, and what response codes the SaaS ingest endpoint returns.

Install

Install it into your project's environment, not as an isolated tool:

uv add --dev guard-core-mcp
claude mcp add guard-core -- uv run guard-core-mcp

uvx guard-core-mcp will start, but an isolated environment contains no guard-core or fastapi-guard for it to introspect, so it can only answer from bundled documentation. Running it inside your own environment is what makes the answers match the versions you actually ship.

Tools

Tool

Answers

versions

Which Guard libraries are installed here, and at what version

validate_config

Is this config valid, including typo'd keys pydantic silently ignores

config_fields

What is this setting, what does it default to, does a setting for X exist

search_docs

Where do the docs cover this

get_doc

The full text of one documentation page

check_payload

Would this request be blocked, and by which pattern

ecosystem

The full registry matrix: 5 languages, engines, adapters, agents, conformance, SaaS contract

adapter_setup

Install plus a verified minimal integration for one adapter (e.g. go + gin)

wire_agent

How to set up the telemetry agent for a language, including the ingestion contract

The ecosystem tools are pure data, so they work everywhere, with or without the Python libraries installed. Every quick-start snippet is copied verbatim from the sibling repo READMEs, and release_status tells you honestly whether a package is published, tagged, or still untagged (source, main, or path dependency only).

ChatGPT plugin

The same tools are also served remotely at https://mcp.guard-core.com/mcp and packaged as a ChatGPT plugin: sign in with a guard-core account, and ChatGPT can validate configs, search the docs and run payloads through the hosted detection engine (the latest published releases, not your local versions). The packaging lives in plugin/, the hosted server in guard_core_mcp.hosting, and the full story (env vars, Docker image, developer-mode test loop, submission checklist) in the ChatGPT plugin guide.

Licence

MIT

mcp-name: io.github.Guard-Core/guard-core-mcp

Available Tools

9 tools
adapter_setupAdapter setupA
Read-onlyIdempotent

Get the install command and a verified minimal integration for one Guard adapter.

Use this when you know the language and web framework and want working setup code.
Use ecosystem instead to survey every adapter, and wire_agent to set up telemetry.

Returns language, engine (package, install command, release_status and conformance
status of the engine the adapter depends on) and adapter (install command,
release_status, its role in the framework, the Python adapter it mirrors, and a
quick-start snippet taken verbatim from the adapter's README). Snippets reflect
the README at the time this server was built; when release_status is untagged,
re-check the repository. An unknown language or framework returns an object with
an error key instead of raising. Read-only static data, works without the Guard
libraries installed.
ParametersJSON Schema
NameRequiredDescriptionDefault
languageYesThe language of the adapter. One of python, go, typescript, php or rust. Any other value returns an error object
frameworkYesThe adapter slug for that language, or the adapter package name. An unknown slug returns an error object listing the valid ones

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real context beyond them: snippets are verbatim from the README as of server build time with a re-check warning when release_status is untagged, unknown inputs return an error object rather than raising, and the tool is read-only static data that works without the Guard libraries installed.

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?

Front-loaded with purpose and routing in the first two sentences, then behavior. The lengthy 'Returns' paragraph enumerates fields that an output schema already covers, so some content is redundant, but the README-drift caveat in it earns its place.

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 an output schema exists, the description covers everything else an agent needs: input semantics, error handling for unknown language/framework, data staleness caveats, and the zero-dependency read-only nature. Nothing material is missing.

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 100% and both parameters are fully documented in the schema, including the error-on-unknown behavior and slug-or-package-name acceptance. The description restates rather than extends this, so the baseline 3 applies.

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?

States a specific verb and resource: 'Get the install command and a verified minimal integration for one Guard adapter.' It explicitly contrasts itself with siblings ecosystem (survey all adapters) and wire_agent (telemetry), so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('when you know the language and web framework and want working setup code') plus named alternatives with their selecting conditions ('Use ecosystem instead to survey every adapter, and wire_agent to set up telemetry'). This is textbook when-to-use/when-not guidance.

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

check_payloadCheck payloadA
Read-onlyIdempotent

Run one synthetic request through guard-core's real penetration-detection engine.

Use this to confirm that an attack payload is caught, or to explain why a benign
request was flagged. Use validate_config instead to check a config, not a request.

Returns is_threat (bool), trigger_info (the matched parameter and pattern, empty
when clean), threat_categories (for example sqli or xss), threat_scores (a score
per category) and elapsed_ms. Verdicts come from the same detection path a live
adapter runs. Read-only and sandboxed: the request is never sent anywhere and
enable_redis is forced off so Redis is never touched. If guard-core is not
installed, returns an object with an error key and a hint instead of raising.

This is the detection stage alone, not the whole middleware pipeline. A real
request also passes IP rules, rate limiting, user-agent and cloud-provider checks,
any of which can block it before detection runs, and a whitelisted IP skips
detection entirely. A clean verdict here does not promise the request reaches the
route, and a threat verdict does not promise a running app would block it.

The scan is bounded, so a payload past a cap is judged on the scanned prefix only:
detection_max_scan_values caps values inspected (default 512),
detection_max_scan_chars caps total characters scanned (default 65536), and
detection_max_json_depth (default 32) caps how deep a JSON body is walked before
the rest is scanned as one serialized value. These caps and the enhanced
detection path apply from guard-core 3.15.0; versions reports what is installed.
ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body as a raw string, or a JSON object or array, which is serialized for you. Omit for a bodyless request
pathNoRequest path of the request to test/
queryNoQuery-string parameters as a JSON object of names to string values
configNoSecurityConfig fields to override guard-core's defaults, as a JSON object, to see how a setting changes the verdict. enable_redis is always forced off
methodNoHTTP method of the request to testGET
headersNoRequest headers as a JSON object of names to values. Names are matched case-insensitively

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, but the description adds substantial context they cannot carry: the sandbox guarantee (request never sent, enable_redis forced off so Redis is never touched), the graceful error-object behavior when guard-core is absent, and the important scoping caveat that this is detection alone, not the full middleware pipeline, so a clean verdict does not promise routing.

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?

Front-loads purpose and the sibling alternative, then layers guarantees, limitations and caps in descending order of importance. Four dense paragraphs is on the long side, but each sentence carries distinct decision-relevant information rather than restating the schema.

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?

Although an output schema exists, the description covers everything else an agent needs: error-mode behavior, the fact that caps and enhanced detection require guard-core 3.15.0 (with `versions` named to check), and the boundary between a detection verdict and a real pipeline block. Nothing material is missing for a zero-required-param tool.

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?

Schema coverage is 100%, so baseline is 3; the description goes beyond it by naming specific SecurityConfig fields reachable through the `config` override (detection_max_scan_values default 512, detection_max_scan_chars default 65536, detection_max_json_depth default 32) and their truncation semantics, which the schema only gestures at with a generic example.

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?

States a specific verb+resource (run one synthetic request through guard-core's real penetration-detection engine) and immediately distinguishes itself from the sibling it overlaps with: 'Use validate_config instead to check a config, not a request.' An agent can route between the two without opening either schema.

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

Usage Guidelines5/5

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

Gives two concrete use cases (confirm an attack payload is caught; explain why a benign request was flagged) and an explicit exclusion pointing at validate_config for config checks. Nothing about when-to-use is left to inference.

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

config_fieldsConfig fields lookupA
Read-onlyIdempotent

Find a Guard config setting by name or by what it does, with type and default.

Use this to learn what a setting means, or whether a setting for some behaviour
exists at all. Use validate_config instead to check a whole config you already
wrote, and search_docs for prose explanations rather than field metadata.

Returns package, version, query, exact and matches. An exact field name fills
exact with that field's name, type, default, required flag and description
(otherwise exact is null). Every query also fills matches with each other field
whose name or description contains every word of the query; if nothing matches
at all, matches falls back to the closest field names by spelling.

Read-only, in-memory lookup. If the library is not installed, or package is not
recognized, returns an object with an error key instead of raising.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesEither an exact config field name or plain words describing the behaviour. Matching is case-insensitive and word order does not matter
packageNoWhich Guard library's installed model to search. One of fastapi-guard, guard-core or guard-agent. Any other value returns an error objectfastapi-guard

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare the read-only, idempotent, closed-world profile, but the description adds real behavioural detail beyond them: the graceful failure mode ('returns an object with an error key instead of raising') when the library is missing or the package is unrecognized, and the spelling-fallback behaviour of matches. Return-shape detail partially duplicates the output schema, which keeps this just short of a 5.

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?

Front-loaded with purpose, then routing guidance, then return/error semantics. Every sentence carries information an agent needs; no filler or restatement of the title.

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?

Complete for a two-parameter lookup tool: purpose, sibling routing, match semantics, fallback behaviour, and error handling are all covered, and an output schema exists so return values need not be exhaustively restated.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds matching semantics the schema does not spell out: 'every other field whose name or description contains every word of the query' (AND-of-words) and the spelling-based fallback when nothing matches. That is genuine meaning beyond the enum-like examples in 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?

States a specific verb and resource ('Find a Guard config setting') and immediately scopes it by name-or-behaviour, with the returned payload (type, default) named up front. It explicitly distinguishes itself from validate_config and search_docs, so an agent can pick it without opening sibling schemas.

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

Usage Guidelines5/5

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

Gives both when-to-use cases ('learn what a setting means, or whether a setting for some behaviour exists at all') and names two alternatives with the exact conditions that select them: validate_config for checking a whole config, search_docs for prose explanations.

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

ecosystemEcosystem registryA
Read-onlyIdempotent

Survey the whole Guard ecosystem: every language, engine, adapter and agent.

Use this to resolve a package name or compare languages. It takes no arguments.
When you already know the language and framework, use adapter_setup for one
adapter or wire_agent for the telemetry agent instead, which return less.

Returns the full registry for five languages (python, go, typescript, php, rust).
Each language entry holds its engine (name, install command, version,
release_status, conformance status), every framework adapter with a verified
quick-start snippet and the Python adapter it maps to, and its telemetry agent
with delivery semantics. A conformance block describes the frozen spec-4.0.2
corpus every engine is tested against, and a saas block documents the
guard-core-app ingestion contract all agents share.

release_status is published (live on a package registry), tagged (a git tag
exists, registry presence may lag) or untagged (install from source, main or a
path dependency). Read it together with notes: several Go, PHP and Rust packages
carry tags or version constants that registry publishing has not caught up with.
Read-only static data that works with or without the Guard libraries installed.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), but the description goes well beyond them: it explains the release_status enum semantics (published/tagged/untagged) with the caveat that notes must be read together with it, and confirms it works without the Guard libraries installed. This is exactly the kind of domain context annotations cannot carry.

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?

Front-loaded with the core purpose and the usage routing before the detailed return-shape walkthrough. Reasonably sized for the information conveyed, though the returns block is long and could be tightened slightly without losing meaning.

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?

An output schema exists, so return values need not be fully explained, yet the description still gives the agent a precise map of the registry structure and the release_status semantics it needs to interpret results correctly. Complete for a zero-param read tool.

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?

There are zero parameters, so the baseline is 4. The description confirms 'It takes no arguments', which is a useful restatement of the empty schema but adds no further parameter meaning because none exists.

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 verb and resource ('Survey the whole Guard ecosystem: every language, engine, adapter and agent') and enumerates exactly what the registry contains. It explicitly distinguishes itself from siblings adapter_setup and wire_agent by describing when those should be used instead.

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

Usage Guidelines5/5

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

Explicit when-to-use ('resolve a package name or compare languages') and when-not-to-use ('When you already know the language and framework, use adapter_setup ... or wire_agent ... instead, which return less'). Names the alternatives and the condition that selects them.

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

get_docGet doc pageA
Read-onlyIdempotent

Return the full text of one bundled Guard documentation page.

Use this after search_docs when a snippet is not enough; it does not search. The
package and path come from a search_docs result.

Returns package, path, url (the live page to cite) and content (the full markdown).
An unknown package or a path that does not exist returns {"error": "unknown doc
path"}; the two cases are not distinguished. Read-only and offline, and it cannot
read files outside the bundled documentation.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe page path relative to the library's bundled docs, copied from a search_docs result. Paths outside the bundled docs are rejected
packageYesThe library the page belongs to, copied from a search_docs result or from the keys versions reports under docs_bundled_for and knowledge_bundled_for

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, yet the description still adds real behavioral context: exact error semantics (unknown package and nonexistent path both return {"error": "unknown doc path"} and are indistinguishable), offline operation, and the scope limit that it cannot read outside bundled docs.

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?

Four short paragraphs, front-loaded with the purpose, then routing guidance, then return shape, then edge cases. Every sentence carries information an agent needs; there is no filler.

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?

Despite an output schema existing, the description usefully names the returned fields and documents the failure case, plus scope constraints. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents both parameters and the baseline is 3. The description adds provenance semantics beyond the schema ('the package and path come from a search_docs result'), which helps the agent source correct values.

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?

States a specific verb and resource ('Return the full text of one bundled Guard documentation page') and immediately distinguishes itself from the sibling search_docs by noting 'it does not search'. An agent can tell this apart from search_docs without opening either schema.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('after search_docs when a snippet is not enough') and names the alternative it is not. It also tells the agent where the required arguments come from (a search_docs result), removing the main selection ambiguity.

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

search_docsSearch docsA
Read-onlyIdempotent

Search the bundled Guard documentation and return ranked, citable pages.

Use this to answer how or why questions from documentation, and to find the page
to read in full with get_doc. Use config_fields instead for a setting's type and
default, and adapter_setup or wire_agent for install and wiring steps.

Returns query and results. Each result has package, path, heading, snippet, url
(the live documentation page to cite) and score. Pass a result's package and path
straight to get_doc to read the whole page.

Read-only and offline: it searches the docs shipped inside this package. Unlike
validate_config, an unrecognized package is not an error, it silently matches
nothing, so an empty results list means either a real gap in the docs or a
mistyped package name; retry with package omitted before concluding the former.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return, highest score first
queryYesWords to look for in the bundled documentation. Pages are ranked by how often the words occur, so use specific terms
packageNoRestrict the search to one library, for example fastapi-guard, guard-core or guard-agent. Omit to search every bundled library. An unrecognized name silently matches nothing

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavior: the search is offline over bundled docs, an unrecognized package silently matches nothing rather than erroring (unlike validate_config), and therefore an empty result is ambiguous and package should be dropped before concluding a docs gap. That failure-mode guidance is exactly what annotations cannot express.

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?

Front-loaded with the one-line purpose, then routing, then return shape, then caveats. Every sentence carries information, though the final retry instruction is dense and could be trimmed into the package sentence it repeats.

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?

An output schema exists, yet the description still states the return surface (query, results with package/path/heading/snippet/url/score) and the handoff path to get_doc. Combined with routing rules and the empty-result interpretation, an agent has everything needed to call and interpret this tool.

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 100% – limit, query and package each carry descriptions, examples and defaults, including the package silent-match caveat. The description restates the package trap but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Search the bundled Guard documentation and return ranked, citable pages') and immediately scopes it as the docs shipped inside this package. It names the siblings it is not (config_fields, adapter_setup, wire_agent) and the sibling it feeds (get_doc), so an agent can separate it from the other nine tools without opening a schema.

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

Usage Guidelines5/5

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

Explicit routing: use it for how/why questions from documentation and to locate a page for get_doc; use config_fields for a setting's type and default; use adapter_setup or wire_agent for install and wiring steps. That covers when-to-use and named alternatives in one sentence.

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

validate_configValidate configA
Read-onlyIdempotent

Check a Guard config dict against the installed library's real pydantic model.

Use this to confirm a config is valid, or to find out why a setting seems to have
no effect. Use config_fields instead when you do not yet know the setting's name.

Returns valid (bool), package, version, model, errors (type errors, each with
field, message and input), unknown_fields (each with name and did_you_mean
suggestions), deprecated (field and message) and construction_warnings. Unknown
keys matter: pydantic silently ignores them, so a misspelled setting does nothing
at runtime and raises no error anywhere else. construction_warnings carries
guard-core's own logged-not-raised misconfiguration warnings: an unknown
constructor keyword, a trusted_proxies or whitelist /0 network, and
enabled_detection_categories empty while penetration detection is enabled.

Read-only: the config is validated in memory and never applied. If the library is
not installed, or package is not recognized, returns an object with an error key
(plus a hint when the cause is a missing install) instead of raising.
ParametersJSON Schema
NameRequiredDescriptionDefault
configYesThe config as a JSON object of field names to values, exactly as you would pass it to the model's constructor
packageNoWhich Guard library's installed model to validate against. One of fastapi-guard (SecurityConfig), guard-core (SecurityConfig) or guard-agent (AgentConfig). Any other value returns an error objectfastapi-guard

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it states validation happens in memory and is never applied, explains that pydantic silently ignores unknown keys so typos fail without error, enumerates what construction_warnings captures, and documents the failure path when the library is missing or package unrecognized.

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?

Purpose and the routing rule are correctly front-loaded, but roughly half the text enumerates the return payload (valid, package, version, model, errors, unknown_fields, deprecated, construction_warnings) even though an output schema already exists. That enumeration distends the definition without adding new executable guidance.

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 two-parameter validation tool with an output schema and full annotation coverage, the definition closes every meaningful gap: usage routing, non-destructive in-memory semantics, the silent-unknown-key trap, and error behavior on missing/unknown package.

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?

Schema coverage is 100%, so the schema already documents both parameters, but the description adds real meaning on the package parameter's failure mode ('Any other value returns an error object', missing-install hint) and frames config as constructor-shaped input.

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?

States a specific verb and resource ('Check a Guard config dict against the installed library's real pydantic model') and explicitly differentiates from the sibling config_fields. An agent can distinguish it from check_payload, ecosystem, or config_fields without opening any schema.

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

Usage Guidelines5/5

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

Gives two concrete use cases ('confirm a config is valid' or 'find out why a setting seems to have no effect') and names the alternative (config_fields) with the exact condition that selects it ('when you do not yet know the setting's name'). Nothing is left to inference.

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

versionsGuard versionsA
Read-onlyIdempotent

Report which Guard libraries this server can introspect, and at which version.

Call this first, before trusting any answer about a version-specific feature. It
takes no arguments.

Returns guard_core_mcp (this server's version), installed (the guard-core,
fastapi-guard and guard-agent versions live in this interpreter), and
docs_bundled_for and knowledge_bundled_for (the versions the bundled docs and the
hand-written ecosystem notes describe).

A null installed version means that library is absent from the interpreter running
this server, so validate_config, config_fields and check_payload cannot answer for
it and any answer would be a guess. An installed version that differs from
docs_bundled_for is normal and only means the docs may lag or lead the install.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare a safe, read-only, idempotent call, and the description goes well beyond them: it names the returned fields, explains that a null installed version means the library is absent and downstream answers would be guesses, and clarifies that an installed/docs version mismatch is normal and harmless.

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 core instruction is front-loaded in the first line ('Report which Guard libraries... Call this first'), followed by return-field semantics. It runs three paragraphs and could be slightly tighter, but each block carries distinct decision-relevant information.

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?

Even though an output schema exists (so return values need not be documented), the description supplies the interpretation rules an agent needs: null-version consequences and docs-vs-install divergence. Nothing required to call it or act on its result is missing.

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 schema has zero parameters at 100% coverage, so the baseline is 4. The description reinforces this with 'It takes no arguments', but there is no additional parameter meaning to convey.

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?

States a specific verb and resource: reports which Guard libraries the server can introspect and at which version. It differentiates itself from siblings by framing itself as the version-provenance precondition rather than a config/payload validator.

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

Usage Guidelines5/5

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

Explicitly tells the agent when to call it ('Call this first, before trusting any answer about a version-specific feature') and ties its outcome to sibling behavior, explaining that validate_config, config_fields and check_payload cannot answer for a library whose installed version is null.

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

wire_agentWire agentA
Read-onlyIdempotent

Get how to set up the Guard telemetry agent for one language.

Use this to ship security events and metrics to the guard-core-app backend. Use
adapter_setup instead for the request-blocking middleware itself.

Returns language, agent (package, install command, release_status, quick-start
snippet, and a summary of its buffer, flush, overflow and retry semantics),
ingestion (the guard-core-app contract the agent ships against: endpoints,
headers, HMAC signing, size limits and response semantics) and framework_note.
For python the note points at the bundled guard-agent doc page for the adapter;
for other languages the agent is standalone and the note says so. An unknown
language or framework returns an object with an error key instead of raising.
Read-only static data, works without the Guard libraries installed.
ParametersJSON Schema
NameRequiredDescriptionDefault
languageYesThe language whose telemetry agent to set up. One of python, go, typescript, php or rust. Any other value returns an error object
frameworkNoOptional adapter slug of that language, to add a note on how the agent hooks into that adapter. Omit for the agent alone

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral facts: unknown language/framework returns an error object rather than raising, and the data is static and readable without libraries installed. It stops short of describing pagination or caching, which is minor here.

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?

Front-loads purpose and the alternative in the first two sentences, then details returns. The return enumeration is somewhat redundant given an output schema exists, which costs a point, but the structure is clean and nothing is misleading.

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 two-parameter read-only lookup with full schema coverage and an output schema, the description covers purpose, alternative routing, error behavior, and offline availability. An agent has everything needed to call it correctly.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining what the framework parameter changes downstream: for python the note points at the bundled guard-agent adapter doc, while for other languages the agent is standalone and the note says so. It also reiterates the error behavior for unknown values, reinforcing the schema's constraint.

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?

States a specific verb and resource ('Get how to set up the Guard telemetry agent for one language') and explicitly separates itself from the sibling adapter_setup. An agent can distinguish this from adapter_setup, search_docs, or get_doc without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('ship security events and metrics to the guard-core-app backend') and names the alternative with its selection condition ('Use adapter_setup instead for the request-blocking middleware itself'). Also states the precondition that it works without the Guard libraries installed.

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 updates
    • First observedadapter_setup
    • First observedcheck_payload
    • First observedconfig_fields
    • First observedecosystem
    • First observedget_doc
    • First observedsearch_docs
    • First observedvalidate_config
    • First observedversions
    • First observedwire_agent

TDQS

A4.7/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, and the descriptions explicitly disambiguate against their nearest neighbors (check_payload vs validate_config, config_fields vs validate_config vs search_docs, search_docs vs get_doc, ecosystem vs adapter_setup vs wire_agent). No two tools compete for the same job; the search/read and middleware/telemetry splits are clean.

Naming Consistency4/5

All names use snake_case consistently and are readable, but the set mixes verb_noun forms (check_payload, validate_config, search_docs, get_doc, wire_agent, adapter_setup) with bare nouns (versions, ecosystem, config_fields). The deviation is minor and never ambiguous.

Tool Count5/5

Nine tools is well within the sweet spot and each earns its place across the distinct jobs of version reporting, config validation, field lookup, doc search/read, ecosystem survey, adapter setup, agent wiring, and payload testing. No redundancy or padding.

Completeness5/5

The surface covers the full lifecycle of the stated purpose: discovering versions, validating configs, looking up fields, searching/reading docs, surveying the ecosystem, and getting adapter/agent setup and testing payloads. Introspection, setup, and troubleshooting paths all have entry points with no obvious dead end.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    AI-powered security scanner for Python projects and GitHub repositories. Detects vulnerabilities, secrets, and provides AI risk assessment.
    11
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Local-first security check for AI coding agents — finds hardcoded secrets, exposed .env files, git-history leaks and vulnerable dependencies (OSV), entirely on your machine. Ask your agent "is this safe to ship?" and get a Launch Readiness score with a fix for every finding.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Local-first, zero-egress security scanner for AI-generated / "vibe-coded" JS/TS. Bundles Opengrep, Gitleaks & Trivy behind one CWE-keyed schema and adds AI-code-specific checks (client-side secret exposure, Supabase RLS, prompt-injection & LLM-output XSS sinks). No account, no telemetry.
    10
    559 npm
    48
    Apache 2.0