Skip to main content
Glama
paultaki
by paultaki

AI Loop Library MCP server

Version 2.1.0. A read-only, local MCP server for the AI Loop Library and its 68 bounded work loops. The calling agent uses its knowledge of the operator's project to choose a loop; the server supplies searchable specs, runnable protocols, and design checks.

One Python file, Python 3.9+, standard library only at runtime. No write tools, credentials, model calls, or hosted server to operate.

Install

Download the single file:

mkdir -p ~/.ai-loop-library
curl -fsSL https://ailooplibrary.com/mcp/server.py -o ~/.ai-loop-library/server.py
python3 ~/.ai-loop-library/server.py --self-test
claude mcp add ai-loop-library -- python3 ~/.ai-loop-library/server.py

For Cursor or another stdio client:

{
  "mcpServers": {
    "ai-loop-library": {
      "command": "python3",
      "args": ["/absolute/path/to/server.py"]
    }
  }
}

The standalone repository contains the same server. Run the following from its root, or from mcp/ in the site repository:

python3 server.py --self-test
python3 server.py --eval
pip install -e .
claude mcp add ai-loop-library -- ai-loop-library-mcp

Already installed? Download the file again or update your clone and reinstall, then restart the MCP connection. Existing installations do not update themselves.

Related MCP server: agent-orchestrator

Tools

Tool

Result

browse_catalog(category?)

Compact catalog digest for the calling agent to judge

search_loops(query, category?, limit?)

Ranked matches with why-matched explanations

get_loop(id_or_slug)

Full spec, canonical URL, verifier classification, loop kind

pick_loop_for_goal(goal, constraints?, limit?)

Lexical shortlist and confidence signal; the calling agent chooses

render_run_protocol(id_or_slug, goal?, risk_posture?, kind?, max_rounds?, max_minutes?)

Markdown protocol and copyable prompt sharing the same stop conditions and approval boundaries

critique_loop(loop_description)

Text-based lint, per-check findings, critical missing checks, and related loops

design_loop(goal, constraints?, cadence?, context?)

New loop scaffold with a suggested domain verifier and explicit TODOs

list_categories()

Category counts and library links

catalog_stats()

Counts, catalog source, update metadata, and cache status

Session protocols honor round and minute caps. Scheduled-tick protocols use experiment logs, per-tick/total spend guidance, and a two-tick no-progress stop. max_rounds and max_minutes apply only to session protocols. Strict posture requires explicit approval for shared-surface actions, including in copied prompts.

The linter recognizes explicit gate language and flags common negations such as "without human approval" or "approval is optional". Critical missing verification, stop, budget, or approval checks prevent a positive overall grade. Text matching cannot establish safety or grant permission, regardless of the numeric score.

Resources: ailooplibrary://catalog and ailooplibrary://loop/{id}. All tools declare readOnlyHint and idempotentHint.

Catalog loading and outages

Resolution order:

  1. AI_LOOP_LIBRARY_CATALOG_PATH: an authoritative local JSON file, using either the catalog.json or data/loops.json shape. An invalid explicit path fails.

  2. AI_LOOP_LIBRARY_CATALOG_URL, defaulting to https://ailooplibrary.com/catalog.json.

  3. Local fallback: catalog.json beside the server, then ../catalog.json, then ../data/loops.json.

The server caches a validated catalog in memory for five minutes. Remote fetches have a ten-second timeout and a 4 MiB response limit. Validation and search indexing finish before a new snapshot replaces the current one.

If refresh and local fallback fail, the server retains its last validated snapshot and waits 60 seconds before retrying. Tool responses include a stale-catalog warning and _meta["ai-loop-library/catalog"] with source, age, and stale status; catalog_stats also includes catalog_status. The cache is process-local and does not survive restart. Changing the configured source invalidates the old snapshot. An initial outage without a valid local catalog returns an error, never sample data. The two-loop embedded sample is reserved for offline tests.

Client compatibility

Supported protocol revisions: 2024-11-05, 2025-03-26, 2025-06-18. Transport: newline-delimited JSON-RPC 2.0 over stdio. Diagnostics go to stderr. Malformed requests and invalid tool arguments return protocol errors without terminating the server. Execution failures return isError: true. Request params and tool arguments must be objects when supplied; omit them for no-argument calls. Explicit null for these objects is intentionally rejected, including for older clients. Nullable individual fields remain supported as declared in each input schema. This validation is a deliberate tightening from 2.0.0.

With 2025-06-18, the six JSON-returning tools advertise output schemas and return structuredContent alongside identical JSON text. Earlier revisions retain the text-only contract. Browse, design, and render tools continue to return Markdown.

Ranking uses IDF-weighted keyword overlap, light stemming, synonyms, and category hints. It is a browsing aid, not a model judgment or constraint solver.

Verification and development

From the directory containing server.py:

python3 -m venv .venv
. .venv/bin/activate
pip install -e '.[test]'
python -m unittest -v test_server
python server.py --self-test
python server.py --eval

The runtime has no third-party dependencies. The optional test dependency, jsonschema, independently validates advertised schemas and real tool results. The 43 offline self-checks and 20 golden ranking queries remain separate from the regression suite, which covers request recovery, argument validation, old-client compatibility, protocol fidelity, lint negation, domain routing, and cache outages. CI runs these gates on Python 3.9 and 3.13.

Release invariant: the site and standalone repositories must ship identical server.py, README.md, pyproject.toml, and test_server.py files. Version metadata must match SERVER_VERSION; the standalone server.json is a registry submission manifest, not proof that a PyPI or registry publication has occurred.

Available Tools

9 tools
browse_catalogA
Read-onlyIdempotent

The entire AI Loop Library as a compact digest (~2k tokens): every loop's id, category, one-line use_when, and verifier strength. This is the highest-signal single call here — you know the operator's repo, data, and recurring pain, so scan the digest against that context and make the pick yourself. Follow with get_loop for depth or render_run_protocol to run one.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional exact category filter, e.g. Engineering, Growth

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish readOnlyHint and idempotentHint, so the safety profile is covered. The description still adds real value beyond the annotations: the ~2k token cost and the exact digest fields returned, which helps an agent budget context. It stops short of describing truncation or paging behavior for large libraries.

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?

Three sentences, front-loaded with the concrete deliverable (the digest and its fields) before any next-step guidance. The middle sentence is somewhat chatty ('you know the operator's repo, data, and recurring pain'), but it still orients the agent toward its own selection judgment.

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?

There is no output schema, and the description compensates by stating the digest's contents and rough size (~2k tokens), plus the follow-up options. For a one-optional-param read tool, this is enough for an agent to call it correctly and know what comes back.

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 the single optional 'category' filter is documented there with examples, so the schema does the heavy lifting. The description only mentions 'category' as a returned field, not as a filter, adding no meaning beyond the schema; 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 resource and scope: the entire AI Loop Library as a compact digest, enumerating exactly what each entry contains (id, category, use_when, verifier strength). It also names the follow-up siblings (get_loop for depth, render_run_protocol to run one), so an agent can distinguish this from deeper or execution-oriented tools.

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

Usage Guidelines4/5

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

Says this is the highest-signal single call and describes the follow-on path (get_loop for depth, render_run_protocol to run), giving a clear usage context. However it never contrasts with close siblings search_loops or pick_loop_for_goal, so the when-not guidance is incomplete.

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

catalog_statsA
Read-onlyIdempotent

Catalog overview: loop count, categories, featured loops, last_updated, and where the catalog was loaded from.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
loop_countYes
catalog_sourceYes
catalog_statusYes
category_countYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so safety and repeatability are covered without description help. The description adds that results describe the catalog's provenance ('where the catalog was loaded from'), which is genuine context, but it does not disclose freshness guarantees or whether last_updated reflects load time or content change.

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?

A single front-loaded fragment that lists only relevant fields, with no filler. It is a noun phrase rather than a sentence, which is terse but marginally less readable than a stated verb would be.

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 the return shape need not be explained further, and with zero parameters there is no invocation nuance to cover. For a no-arg read-only stats tool, the description is sufficient.

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 takes zero parameters, so the baseline of 4 applies. There is no parameter semantics to explain and the description correctly avoids inventing any.

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?

States a concrete resource (the catalog) and enumerates the exact payload: loop count, categories, featured loops, last_updated, and load origin. It is distinguishable from browse_catalog, search_loops, and list_categories, though it never uses an explicit verb like 'returns' or 'reports', leaving the action slightly implicit.

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 guidance on when to call this versus siblings. An agent cannot tell from the text whether this should precede browse_catalog/scarch_loops or how it relates to list_categories, which overlaps on the 'categories' output. No prerequisites or exclusions are given.

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

critique_loopA
Read-onlyIdempotent

Lint any loop design — the operator's own, or one you drafted — against the AI Loop Library anti-pattern rubric: verifier present and objective, stop condition, budget, one-change-per-round, durable state, same-check-every-round, micro-metric objective (MVL), human gates on risky surfaces, defined trigger. Returns a 0–10 score, per-check fixes, and related catalog loops. Deterministic text lint, not a model — 'missing' means 'not stated'.

ParametersJSON Schema
NameRequiredDescriptionDefault
loop_descriptionYesThe loop design in plain words: objective, trigger, action, verification, stop condition, budget, risk handling

Output Schema

ParametersJSON Schema
NameRequiredDescription
gradeYes
scoreYes
findingsYes
critical_missingYes

TDQS

A4.4/5.0
Behavior4/5

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

Adds meaningful context beyond the readOnly/idempotent annotations: it discloses that this is a deterministic text lint rather than a model, and that 'missing' means 'not stated' rather than absent — a crucial interpretive caveat. It stops short of describing limits such as length caps or determinism guarantees on scoring.

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 action and scope, then the rubric list, then the return shape. The nine-item check enumeration is long but earns its place by telling the agent what to include; the trailing clause about determinism could be tightened.

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?

With an output schema handling return values and annotations covering safety, the description fills the remaining gaps: the rubric criteria, the deterministic-lint caveat, and the return shape. Nothing material to correct invocation 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?

With a single parameter at 100% schema coverage, the baseline is already 3-4; the description goes further by enumerating the rubric dimensions (verifier, stop condition, budget, MVL, human gates…) that loop_description should cover, effectively telling the agent what content to supply.

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 ('lint any loop design') and immediately distinguishes it from the design/browse siblings by its rubric-linting scope. An agent can tell it apart from design_loop or get_loop without opening the schema.

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

Usage Guidelines4/5

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

Gives clear context for when to call it ('the operator's own, or one you drafted'), which covers both review and self-check scenarios. It does not, however, name an alternative or an explicit when-not condition relative to siblings like design_loop or render_run_protocol.

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

design_loopA
Read-onlyIdempotent

Scaffold a NEW loop spec from a stated bottleneck when no catalog loop fits: returns a draft with every required field (trigger, scope, one-round action, suggested verifier for the domain, state files, stop conditions, budget, risk colors), an MVL sanity check on the objective, and the nearest existing loops to steal structure from. Follow with critique_loop on the completed draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesThe bottleneck or outcome, in plain words
cadenceNoOptional trigger/cadence, e.g. 'nightly', 'monthly tick'
contextNoOptional operator context: stack, data sources, what already exists
constraintsNoOptional constraints, e.g. 'read-only', 'no budget for APIs'

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint and idempotentHint, which the description is consistent with (it produces a draft rather than persisting anything). It goes beyond the annotations by enumerating the returned draft's contents (trigger, scope, one-round action, verifier, state files, stop conditions, budget, risk colors), the MVL sanity check, and nearest existing loops — though it does not say whether the draft is saved anywhere.

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 the core action and its precondition, then packs the return contents into a single dense clause, closing with the next-step instruction. Efficient overall, though the middle enumeration is long and slightly list-heavy.

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?

With no output schema, the description compensates by describing what the draft contains and what analysis accompanies it, and it states the required follow-up tool. Only the persistence/state question is left open, which is minor for a scaffolding 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%, so the schema already documents goal, cadence, context, and constraints, and the baseline is 3. The description only loosely echoes these (bottleneck, domain, trigger) without adding format, syntax, or interaction detail beyond the schema.

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

Purpose5/5

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

States a specific verb (scaffold) and resource (a new loop spec), plus the trigger condition (from a stated bottleneck when no catalog loop fits). This distinguishes it cleanly from catalog-reading siblings like search_loops, get_loop, and pick_loop_for_goal.

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?

Explicitly scopes usage with 'when no catalog loop fits', implying the catalog tools are the alternative when one does fit, and names the required follow-up step (critique_loop on the completed draft). It stops short of naming a specific sibling to try first, so it is clear context without full routing.

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

get_loopA
Read-onlyIdempotent

Fetch one loop's full spec by id or slug: objective, trigger, allowed actions, verification (+ verifier strength), stop condition, budget, approval boundary, copyable prompt, and canonical URL. Use after browse_catalog or search_loops.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_or_slugYesLoop id, e.g. 'ci-optimization', or its title

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
titleYes
summaryYes
categoryYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotentHint), so the bar is lower; the description still adds value by disclosing the depth of the payload, including verifier strength and approval boundary. It stops short of noting error behavior for unknown ids/slugs or whether the response is cached.

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 compact sentences, front-loaded with the action and the returned surface, ending with the routing hint. 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?

With an output schema present, the description need not explain return values, yet it usefully summarizes them; the single required parameter is fully documented in the schema. Nothing an agent needs to invoke this correctly 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 coverage is 100% on the single parameter, so the baseline is 3. The description says 'by id or slug' while the schema documents 'id ... or its title', a mild inconsistency that adds no disambiguating detail beyond the schema.

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

Purpose5/5

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

States a specific verb ('Fetch') and resource ('one loop's full spec') and enumerates exactly what is returned: objective, trigger, verification, stop condition, budget, approval boundary, prompt, canonical URL. This is clearly distinguishable from siblings like browse_catalog and search_loops.

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?

'Use after browse_catalog or search_loops' gives explicit sequencing context, telling the agent when this tool is the right next step. It does not, however, name an exclusion or an alternative for the case where the agent already knows the identifier directly.

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

list_categoriesB
Read-onlyIdempotent

List loop categories with live counts and library filter URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
categoriesYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that counts are "live" and that filter URLs are included, but with an output schema present it need not elaborate further; this is modest added context.

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?

A single front-loaded sentence with no filler; the key noun (loop categories) leads. It is almost too terse to carry usage or scope nuance, but every word earns its place.

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?

With zero parameters, read-only annotations, and an output schema to describe the return shape, the description covers the essentials. The one gap is routing guidance relative to the many sibling catalog tools.

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 takes zero parameters and the schema coverage is 100%, so there is nothing for the description to disambiguate. Baseline 4 applies for a no-argument tool.

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 states a specific verb and resource ("List loop categories") and adds scope detail (live counts, library filter URLs), so the agent knows exactly what comes back. It does not distinguish itself from siblings like browse_catalog or catalog_stats, which also surface catalog-level information.

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 statement of when to reach for this tool versus browse_catalog, search_loops, or catalog_stats. The implied usage is a bare listing, but no conditions, prerequisites, or exclusions are given.

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

pick_loop_for_goalA
Read-onlyIdempotent

Shortlist the best-matching loops for a stated goal (lexical ranking with an honest confidence signal) — you make the final call. Returns 5 candidates with use_when, verification, and why-matched so you can judge against operator context the server can't see. When confidence is low, trust your own read of browse_catalog over this ranking. Follow with render_run_protocol for the executable version.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesThe outcome the operator wants, in plain words
limitNo
constraintsNoOptional constraints, e.g. 'read-only', 'no production access'

Output Schema

ParametersJSON Schema
NameRequiredDescription
goalYes
shortlistYes
confidenceYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds genuinely non-structured behavior: lexical ranking, an honest confidence signal, and a candidate payload of use_when/verification/why-matched. It stops short of rate limits or failure modes, so 4 rather than 5.

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 the verb and resource, then layers the caveat and the follow-up. Dense but every clause carries routing or behavioral information; the em-dash aside is slightly compressed but not wasteful.

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?

Output schema exists, so return values needn't be enumerated, yet the description still tells the agent what the candidates contain and when to distrust the ranking. Nothing needed to call it correctly 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 coverage is 67%, so the schema already documents goal, limit, and constraints reasonably. The description clarifies that goal is an operator outcome and that constraints capture operator context the server can't see, but it omits the constraints parameter by name and the configurable limit ('Returns 5 candidates' only reflects the default). Baseline 3 fits.

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 ('shortlist the best-matching loops') scoped to a stated goal, and distinguishes itself from siblings by naming browse_catalog and render_run_protocol. An agent can tell it apart from search_loops 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 names the fallback ('When confidence is low, trust your own read of browse_catalog') and the required follow-up ('Follow with render_run_protocol for the executable version'). This is a clear when-to-use plus named alternatives, not mere implication.

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

render_run_protocolA
Read-onlyIdempotent

Render a loop as an executable markdown run protocol an agent can follow directly: objective/done contract, allowed actions, one-change-per-round rule, the same verification every round, a durable state-file skeleton, stop conditions, budget, risk-colored approval boundary, proof format, and a paste-ready Claude Code prompt. Session loops get bounded rounds; scheduled-tick business loops (SEO, ads, product metrics) get experiment logs, undo-losers discipline, and notify-the-human ticks.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoOptional operator goal to embed in the protocol
kindNoauto infers from the loop's trigger; override to force a session or tick protocolauto
id_or_slugYesLoop id or title
max_roundsNoSession loops: round budget
max_minutesNoSession loops: time budget
risk_postureNostrict treats every shared-surface action as approval-gateddefault

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnlyHint and idempotentHint, so the safety profile is covered. The description adds substantive behavioral detail beyond that: the protocol is paste-ready, includes a durable state-file skeleton, stop conditions, budget, a risk-colored approval boundary, and undo-losers discipline for tick loops. It stops short of saying what is returned (inline markdown vs. file) or what happens on a bad id_or_slug.

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?

Two sentences, front-loaded with the core purpose before the content enumeration. The first sentence is a dense but scannable list where each item earns its place; the second adds the session/tick split. Slightly list-heavy, but no filler 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?

With no output schema, the description carries the burden of describing the return value, and it does so thoroughly by enumerating the protocol's sections. The remaining gap is the delivery form (returned as text, written to a file, or a URL) and error handling for an unresolved id_or_slug, which an agent would want before invoking.

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 would be 3, but the description goes further by explaining the two protocol flavors that the `kind` enum selects between (session rounds vs. scheduled-tick experiment logs) and by tying budgets, risk-colored approval, and the goal to their respective parameters. That meaning is not present in the schema strings alone.

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 leads with a specific verb+resource: 'Render a loop as an executable markdown run protocol an agent can follow directly,' and then enumerates the artifact's contents, so the agent knows exactly what is produced. It does not, however, name or contrast any sibling (design_loop, critique_loop, get_loop), so an agent must infer the boundary itself.

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?

Usage is only implied: the description explains that session loops get bounded rounds and scheduled-tick loops get experiment logs, which hints at when each flavor applies, but it never states when to reach for this tool versus design_loop or critique_loop, nor any prerequisite (e.g., the loop must already exist).

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

search_loopsA
Read-onlyIdempotent

Search AI Loop Library's bounded, verifiable work loops by job-to-be-done, keyword, or category. Each loop ships with a trigger, one-change-per-round discipline, a verification check, a stop condition, a budget, and a human approval boundary — so an agent can run it without thrashing. Returns ranked matches with a one-line why-matched.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesJob to be done or keywords, e.g. 'flaky tests' or 'source-check a draft'
categoryNoOptional exact category filter, e.g. Engineering, Knowledge, Operations

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint), and the description adds real behavioral context: loops are bounded, ship with trigger/verification/stop-condition/budget/human-approval boundaries, and results are ranked with a one-line why-matched. It omits pagination/rate-limit behavior, keeping it below 5.

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 verb and resource, then one compact sentence explaining what a loop contains. It is a touch long in the middle clause list, but every phrase carries informational weight about the returned objects.

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?

An output schema exists, so return values need not be explained, yet the description still tells the agent results are ranked and include a why-matched line. For a low-risk read-only search with three params, nothing critical 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 coverage is 67% and the schema already documents query and category with examples. The description reinforces the 'job-to-be-done' framing and confirms category filtering but adds no syntax, matching, or limit semantics beyond what the schema provides, so the baseline 3 applies.

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?

States a specific verb (Search) and resource (AI Loop Library's bounded, verifiable work loops) plus the search axes (job-to-be-done, keyword, category), so it is distinguishable from get_loop or browse_catalog. It does not explicitly name rival siblings like pick_loop_for_goal, so it stops short of a 5.

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?

Usage is implied by the query axes, but there is no explicit when-to-use statement, when-not condition, or named alternative. The closest sibling, pick_loop_for_goal, is also goal-driven and the description gives no cue for choosing between them.

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 updatesv2.1.0
    • Changedbrowse_catalog1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcatalog_stats2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "catalog_source": {
        +      "type": "string"
        +    },
        +    "catalog_status": {
        +      "properties": {
        +        "age_seconds": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "stale": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "stale",
        +        "source",
        +        "age_seconds"
        +      ],
        +      "type": "object"
        +    },
        +    "category_count": {
        +      "type": "integer"
        +    },
        +    "loop_count": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "loop_count",
        +    "category_count",
        +    "catalog_source",
        +    "catalog_status"
        +  ],
        +  "type": "object"
        +}
    • Changedcritique_loop2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "critical_missing": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "findings": {
        +      "items": {
        +        "properties": {
        +          "check": {
        +            "type": "string"
        +          },
        +          "fix": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "label": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "pass",
        +              "missing"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "check",
        +          "label",
        +          "status",
        +          "fix"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "grade": {
        +      "type": "string"
        +    },
        +    "score": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "score",
        +    "grade",
        +    "critical_missing",
        +    "findings"
        +  ],
        +  "type": "object"
        +}
    • Changeddesign_loop1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_loop2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "category": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "title",
        +    "category",
        +    "url",
        +    "summary"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_categories2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "categories": {
        +      "items": {
        +        "properties": {
        +          "category": {
        +            "type": "string"
        +          },
        +          "library_url": {
        +            "type": "string"
        +          },
        +          "loop_count": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "category",
        +          "loop_count",
        +          "library_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "categories"
        +  ],
        +  "type": "object"
        +}
    • Changedpick_loop_for_goal2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "confidence": {
        +      "enum": [
        +        "none",
        +        "low",
        +        "medium",
        +        "high"
        +      ],
        +      "type": "string"
        +    },
        +    "goal": {
        +      "type": "string"
        +    },
        +    "shortlist": {
        +      "items": {
        +        "properties": {
        +          "category": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "category",
        +          "url",
        +          "summary"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "goal",
        +    "shortlist",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
    • Changedrender_run_protocol1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedsearch_loops2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "properties": {
        +          "category": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "summary": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "category",
        +          "url",
        +          "summary"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
  2. 2 tool updatesv2.0.0
    • Addedcritique_loop
    • Addedpick_loop_for_goal
  3. 7 tool updatesv0.1.0
    • First observedbrowse_catalog
    • First observedcatalog_stats
    • First observeddesign_loop
    • First observedget_loop
    • First observedlist_categories
    • First observedrender_run_protocol
    • First observedsearch_loops

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have distinct roles (get_loop vs render_run_protocol, critique_loop vs design_loop). However, browse_catalog, search_loops, and pick_loop_for_goal all help discover loops, and their boundaries—especially between search and pick—require reading descriptions to avoid misselection.

Naming Consistency4/5

Most names follow a clear verb_noun snake_case pattern (browse_catalog, search_loops, get_loop, critique_loop, design_loop, list_categories). Minor deviation: catalog_stats is a noun phrase rather than verb-led, inconsistent with the rest.

Tool Count5/5

Nine tools are well-scoped for a library browse/curate/design server. Each tool earns its place across discovery, inspection, rendering, critique, design, and metadata.

Completeness4/5

The surface covers discovery (browse/search/pick), depth (get_loop), execution (render_run_protocol), quality (critique_loop), creation (design_loop), and metadata (list_categories/catalog_stats). A gap remains for updating or managing existing loop entries, but that may be out of scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Exposes 31 high-assurance agentic coding skills as MCP tools and resources, enabling AI agents to invoke structured workflows across DISCIPLINE, TECHNIQUE, KNOWLEDGE LAYER, and REFERENCE registers.
    5
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 300+ MCP tools for orchestrating AI agents — including swarm coordination, self-learning memory, and task management — enabling MCP clients like Claude Code and Cursor to spawn, coordinate, and learn from specialist agents across sessions.
    11,321 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables coding agents to perform file, search, patch, git, process, test, package, network, and system operations through 60 typed MCP tools with structured inputs/outputs, structured errors, and a full event journal, replacing terminal use with a typed machine API.
    MIT