
Agent Pattern MCP
io.github.olkPublished by GitHub account olkv1.0.4Updated Oct 31, 2026
MCP server that provides AI agent pattern expertise for designing agent systems
Overview
Local MCP server that gives an assistant a catalog of AI agent design patterns and LLM-backed tools to analyze, generate and evaluate agent system designs.
- What you can do
- Analyze requirements and a domain to get a recommended topology, selected patterns with scores and quality metrics
- Generate a full agent system design from requirements and chosen patterns
- Evaluate an existing design against quality attributes such as reliability and safety
- Run the full design pipeline, or submit it as a background job and poll or cancel it
- Browse the pattern catalog: list patterns by category or domain and fetch one pattern's full JSON
- Expose four user-invoked workflow prompts, also reachable through list_prompts and get_prompt tools
- When to use it
- Useful when you are designing or reviewing a multi-agent system and want pattern-based recommendations, topology suggestions and scored quality metrics rather than ad-hoc advice. The analysis-only tool suits agents that write the implementation themselves; the full design path suits callers that want a finished design artifact.
- Requirements
- Runs as a local process, either via Docker (Docker 2.20+, about 5 GB free, linux/amd64) or with Python 3.12+ and uv. Needs a generator LLM API key in GENERATOR_API_KEY plus provider, model and base URL settings, and an embedder endpoint (TEI sidecar or remote) with EMBEDDER_API_KEY, which must be non-empty even for keyless TEI. Network access to the LLM provider.
Installation
In SourceWeft
- Open Agent Pattern MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
agent-pattern-mcp
[CI] [Python 3.12+] [License: MIT] [M8ven Score]
An MCP (Model Context Protocol) server that provides agent system design expertise to AI coding agents. Given a requirements string and a domain, it analyses the problem, selects matching agent patterns (from 68 built-in patterns), generates a concrete agent system design with agents, relationships, tool contracts, state models, and message contracts, and evaluates it against quality attributes (reliability, cost efficiency, latency, output quality, observability, safety, simplicity). Coding agents that write the implementation themselves can call analyze_agent_system for topology and scored-pattern guidance without generating a design.
Table of Contents
- ⚡ Quickstart
- Install via AI Agent
- 🔌 Connect Your Agent
- 🧑🏫 SKILL for AI Agents
- 🧪 Use the Tools
- 🛠️ Tools at a Glance
- 📖 Pattern Catalog
- Install Alternatives
- Configuration
- Structured Reasoning (shannonthinking / code-reasoning)
- Extending with Custom Patterns
- Long-running tools & timeouts
- Troubleshooting
- Building & Development
- Publishing
- systemd Service (Linux)
- License
⚡ Quickstart
Server starts on streamable-http at http://localhost:8821/mcp (dev compose host port; systemd uses 8811). Then connect your agent below.
Install via AI Agent
To have an AI coding agent install the Docker stack from prebuilt images (no local build), point it at INSTALL.md — the non-interactive agent runbook (copy-paste commands, expected outputs, verification probes).
Pick one path in INSTALL.md:
- Path A — Compose stack (
:8821): evaluating / developing, no sudo needed. Own TEI sidecar copies. - Path B — systemd stack (
:8811): persistent host service, starts at boot, needssudo. Uses the sharedpattern-tei-infraTEI stack.
The agent needs a repo clone, Docker ≥ v2.20 with group membership, ~5 GB free, a MINIMAXAI_API_KEY (or another provider per INSTALL.md#switching-the-generator-llm), and linux/amd64 (on arm64 it builds locally via make docker-build-all). After install, continue with Connect Your Agent below.
🔌 Connect Your Agent
Claude Code
Or add to your project for the whole team:
OpenCode
OpenCode uses HTTP transport. Start the server first, then configure opencode:
Note:
GENERATOR_API_KEYis read from the server's config file (~/.config/agent-pattern-mcp/config.json), not from opencode's environment.
Codex CLI
Add to ~/.codex/config.toml:
Or via CLI:
🧑🏫 SKILL for AI Agents
The SKILL in skills/agent-pattern-mcp/ is written for Oh My Pi (OMP), where this server's tools are reached as xd://mcp__agent_pattern_* devices and every MCP request is bounded by a deadline (OMP_MCP_TIMEOUT_MS → per-server timeout → 30 s). It teaches the agent which entry point fits that deadline, how to read the results, and the full workflow recipes.
Install for OMP — copy the skill directory into the user skills root, or point skills.customDirectories at this repository's skills/ directory in OMP's config:
The skill then tells the agent:
- Which entry point fits OMP's deadline: the async job trio by default, one-shot
design_agent_systemonly after raising the server'stimeout(every LLM tool aborts under the 30 s default —submit_agent_design_jobanswers in ~0.05 s) - That
analyze_agent_systemis the analysis-only path for coding agents that write the code themselves — topology, scored patterns, quality metrics, no design generated — whiledesign_agent_systemis for callers that want the design artifact - How to phrase
requirements,domain, andtopologyas separate structured arguments - How to interpret
final_quality_score,attempts > 1, andevaluation.recommendations - That
read mcp://pattern://…is ambiguous while the siblingarchitecture-patternserver is connected, so the tool route (get_agent_pattern) is authoritative
The tool schemas, error codes and design-dict shape in references/ are client-agnostic; only the deadline/device guidance is OMP-specific.
🧪 Use the Tools
All tools accept requirements (free text) and domain (e.g. tool-use-tasks, data-processing, customer-support) as arguments. The examples below show the exact tool call shape so you can use them in any MCP client or API consumer.
Design your first agent system
In Claude Code (or any MCP client), paste the natural-language instruction:
Your agent calls design_agent_system internally. The server returns a full agent system design: agents (planner, searcher, coder, synthesizer), quality attribute scores (reliability: 8.0, output_quality: 8.5, …), and specific recommendations.
That is the design path: the server's LLM generates the design artifact for you, which is why a call takes minutes. If your agent writes the implementation itself and only needs the pattern expertise, call analyze_agent_system instead — it returns the recommended topology, the selected patterns with scores, quality_metrics (per-attribute 0–10), and matched domains without generating a design, so the generate and evaluate phases never run. Measured basis: a single live analyze_agent_system call on this host returned in 23.3 s, while the committed full-pipeline corpus measured p50 ≈ 304 s and p95 ≈ 375 s over 20 scenarios (benchmarks/base/summary.json).
Or call tools directly from your agent:
Async job pattern: submit_agent_design_job + get_agent_design_status
ONLY for clients with short request timeouts (Cursor, Claude Desktop, TS-SDK). The default design path is design_agent_system with heartbeat defence. submit_agent_design_job returns a job_id immediately; poll get_agent_design_status until done:
In Python (via the MCP HTTP API directly — see examples/agent_client_async.py):
See examples/agent_client_async.py for the complete runnable example. Run it with:
Explore the pattern catalog
Or get details on a specific pattern:
🛠️ Tools at a Glance
Domain and Topology are structured parameters — pass them as separate tool arguments, not embedded in the requirements text.
Example prompts:
💬 Prompts
This server also exposes four user-invoked workflow prompts (slash commands in MCP clients). Unlike tools, the LLM does not autonomously invoke prompts — the user selects one and fills in its arguments. Each prompt encodes a tested tool-orchestration recipe.
* = required argument
Tool-only clients
Clients that only support the tools protocol (no native prompts/list or prompts/get) can access all four workflow prompts via the generated list_prompts and get_prompt tools, which route through the server's middleware chain exactly as native prompt calls do.
📖 Pattern Catalog
Via MCP tools (recommended — works in all clients)
Valid category values: reasoning, tool_use, planning, reflection, research_synthesis, multi_agent, memory, retrieval, safety_control, observability.
Via MCP resources
Note: on hosts where the sibling
architecture-pattern-mcpserver is also connected,pattern://{name}is ambiguous (both servers register the scheme) — the tool route (get_agent_pattern) is authoritative.
Pattern JSON structure
Each pattern includes: name, category, topology, context, benefits, tradeoffs, quality_attributes (reliability/cost_efficiency/latency/output_quality/observability/safety/simplicity, numeric scores), suitable_domains, component_types, technology_stack, design_principles, best_practices.
Required fields: name, context, category, topology, suitable_domains, quality_attributes (all 7 keys).
Install Alternatives
Docker (manual)
Local Development (uv)
Prerequisites: Python 3.12+, uv
Or use the installed console script (after make install):
The TEI embedder (Qwen3-Embedding-0.6B) is required for domain-scoped pattern retrieval. Without it, the server falls back to the default pattern. Docker compose starts it automatically; local users must run it separately on port 8080.
The retrieval legs are built at server startup: BM25 always, the FAISS dense leg from the embedding-index cache when a valid snapshot exists (otherwise embedded from scratch). Startup stays fail-fast — every start makes one probe embedding call, so a misconfigured or unreachable TEI sidecar aborts warmup rather than breaking the user's first design request. Docker compose's service_healthy dependency ordering guarantees TEI is ready before the app starts.
TEI startup: both sidecar images (
docker/Dockerfile.tei-embed,docker/Dockerfile.tei-rerank) ship a self-built TEI router (v1.9.4 + unmerged PR #884) withWARMUP_TOKENS=0by default — this skips the synthetic warmup pass (measured ~131 s embed / ~78 s rerank) so containers become ready after weight load only. Override per sidecar viaTEI_WARMUP_TOKENS/TEI_RERANK_WARMUP_TOKENS(positive N warms with N tokens instead; values >MAX_BATCH_TOKENSare rejected at startup).
GPU TEI: the shipped sidecars are CPU images (FROM ghcr.io/huggingface/text-embeddings-inference:cpu-1.9, ORT backend — batch cap 8 for this model) and the Stage-0 router is built CPU-only (--features ort,http). This repo ships no GPU build path — running on CUDA would require changing the runtime base image to :cuda-1.9 and rebuilding the router with the CUDA feature set, which is not a supported recipe here (only design-pattern-mcp-local ships one: make docker-build-tei-embed-gpu). A stock upstream TEI image without PR #884 silently ignores WARMUP_TOKENS.
Already-running embedder/reranker: when embedding and reranking endpoints already run on other servers, point the MCP server at them and skip the sidecars (docker/docker-compose.hub.yml starts the MCP server only and wires exactly this). The remote embedder must be TEI serving the same model — keep EMBEDDER_PROVIDER=tei and set EMBEDDER_BASE_URL to its OpenAI-compatible route (http://<host>:8080/v1, the config.json default). This server's embedder config has no model field (src/patterns/embedder.py::build_embedder sends an empty model name for the non-tei providers), so openai / ollama / vllm / hosted_vllm cannot address an arbitrary remote model without a code change. The reranker is not a LiteLLM client — it POSTs {RERANKER_BASE_URL}/rerank directly (default http://pattern-tei-rerank:8080, no /v1); provider/model syntax in the LiteLLM embedding docs applies to the embedder only. EMBEDDER_API_KEY is forwarded as the LiteLLM api_key (any non-empty string satisfies a no-auth TEI).
Configuration
config.json
The server reads ~/.config/agent-pattern-mcp/config.json (override with --config-path):
{env:VAR:-default} syntax expands environment variables at load time.
Generator LLM (LlamaIndex LiteLLM)
The generator LLM is accessed through the LlamaIndex LiteLLM integration (llama-index-llms-litellm). All provider settings therefore follow LiteLLM's model syntax: <provider>/<model> (e.g. openai/gpt-4o-mini, anthropic/claude-sonnet-4-5, openrouter/minimax/minimax-m2).
The server composes the LiteLLM model string from your configuration as generator.provider + generator.config.model:
If the configured model already contains a provider prefix (e.g. openai/gpt-4o-mini), that prefix is stripped and replaced by the configured provider.
- Provider list, model names, and the exact
<provider>/<model>syntax: LiteLLM Providers documentation - Custom/OpenAI-compatible endpoints (proxies, vLLM, Ollama, …): set
GENERATOR_BASE_URL(generator.config.base_url) — it is passed as the LiteLLMapi_base GENERATOR_API_KEYis passed as the LiteLLMapi_key;temperature,top_p,top_k, andstreammap to the corresponding LiteLLM parameters
Key environment variables
Note: the dev and systemd compose files set
RETRIEVAL_BM25_TOP_K=20/RETRIEVAL_DENSE_TOP_K=20(per-leg stage-1 caps) andRETRIEVAL_MIN_FUSION_SCORE=0.015, overriding the config defaults above. The deployed MiniMax generator block (GENERATOR_PROVIDER=minimax,GENERATOR_MODEL=minimax/MiniMax-M2.7,GENERATOR_BASE_URL=https://api.minimax.io/v1,RETRIEVAL_USE_LEAN_WIRE_SCHEMA=true) also differs from the OpenAI config defaults.
Embedding-index cache (dense retrieval snapshot)
The dense retrieval leg is one FAISS index over every catalogue domain slug (36 on the shipped 68-pattern catalogue). Its embeddings are snapshotted to disk after a cold build and reloaded on the next start, so a warm start costs one probe embedding instead of a full corpus pass (measured on a dev TEI sidecar container, 36 slugs: 3.3 s → 0.28 s). BM25 is cheap and rebuilt every start.
- Path:
EMBEDDING_CACHE. The image bakes/var/cache/agent-pattern-mcp/embedding-index; host runs (uv) use~/.config/agent-pattern-mcp/embedding-index. - Where the files live: the logged path is the in-container view. Docker
stores the named volume at
/var/lib/docker/volumes/<volume-name>/_data(root-owned), so/var/cacheon the host stays empty by design. Inspect without sudo:docker exec <container> ls /var/cache/agent-pattern-mcp/embedding-index, ordocker volume inspect -f '{{.Mountpoint}}' <volume-name>for the host side. - Containers persist it in a named volume
(
agent-pattern-mcp-dev-embedding-index/agent-pattern-mcp-systemd-embedding-index), so the snapshot survives image rebuilds, container recreation anddocker compose down. Reset it withdocker compose down -vordocker volume rm <name>; a baredocker runneeds-v agent-pattern-mcp-embedding-index:/var/cache/agent-pattern-mcp/embedding-index. - Rebuilt automatically when the embedding function changes (provider,
base_url, resolved model name, query/text instruction prefixes), when the slug corpus changes, or when a probe vector shows a different model behind an unchanged config (e.g. a redeployed TEI sidecar). Log lines:Embedding index cache hit: N slugs, 0 corpus embed calls (snapshot <cache-dir>)/Embedding index cache miss (<reason>); embedding corpus/Embedding index snapshot written: N slugs (path <cache-dir>)— emitted immediately after the embedding pass, before any other startup step — and, with the cache switched off,Embedding index cache disabled; embedding corpus(never reported as a miss). - Single writer: no locking — run one server process per cache directory. A failed snapshot write only logs a warning; the server runs cacheless and never fails the start.
- Operations notes (volumes, permissions, disable switch): INSTALL.md.
CLI flags
Structured Reasoning (shannonthinking / code-reasoning)
Before each LLM phase call (ANALYZE / GENERATE / EVALUATE / RETRY), the server
optionally runs a bounded ThoughtGenerator loop: it authors each reasoning
step with the generator's own LLM (LlamaIndex LiteLLM; one completion per
step) and submits it to the
shannonthinking and/or
code-reasoning MCP servers —
structured thinking scratchpads that validate, number, and record each step.
The resulting trace is injected into the phase prompt as a
<reasoning_context> block. Contract: each thought = 1 LLM completion + 1
MCP tool call, capped by REASONING_MAX_TOTAL_STEPS (default 8).
Key properties:
- Embedded in Docker — the
build-mcpsstage bakes both npm packages ([email protected],@mettamatt/[email protected]) into the image at/usr/local/lib/node_modules/...; the runtime invokes them directly vianode(no network, no npx). - Auto-fallback to npx outside Docker — when the embedded entry points
are missing, the client falls back to
npx -y <pkg>(first call downloads). - Process-per-call isolation — each tool call runs in a fresh subprocess
(
keep_alive=False); nothing persists between calls. - Silent per-call degradation — any spawn/timeout/tool failure logs a WARNING and the phase proceeds with a degraded in-prompt thinking scaffold (decompose → classify → calibrate → resolve → verify); it never raises.
- Loud startup — the lifespan health-check probes both tools and logs an
ERROR (with resolution hints) if one is unreachable; set
REASONING_FAIL_FAST=trueto make startup fail instead. - Trace caching — ANALYZE and GENERATE traces are computed once per design request and reused across design-loop attempts.
Opting in / tuning
Reasoning is enabled by default in this repo's deployed stacks (both compose files set REASONING_ENABLED=true):
Per-phase tool selection (defaults in src/reasoning/config.py::_default_per_phase):
analyze ["code", "shannon"] × 4 thoughts, generate ["code"] × 3,
evaluate ["shannon"] × 3, refine ["code", "shannon"] × 2.
A full design run issues up to 24 reasoning tool calls as serial subprocesses —
minutes, not seconds.
Local (non-Docker) development needs Node.js; either install the packages
globally (npm install -g server-shannon-thinking @mettamatt/code-reasoning)
or let the npx fallback download them on first use.
Set LOGGING_LEVEL=DEBUG to capture the authored thought and tool response
for every per-step reasoning call. Docker/systemd stacks default to INFO;
export LOGGING_LEVEL=DEBUG before make docker-up.
Extending with Custom Patterns
Pattern files are loaded from ~/.config/agent-pattern-mcp/pattern/ (configurable via PATTERN_DIRECTORY). Drop a JSON file alongside the 68 built-in patterns.
Minimal pattern structure:
Required fields: name, context, category, topology, suitable_domains, quality_attributes (all 7 keys).
Valid category values: reasoning, tool_use, planning, reflection, research_synthesis, multi_agent, memory, retrieval, safety_control, observability.
Full JSON Schema with all enums: docs/pattern-schema.json
Long-running tools & timeouts
design_agent_system runs a multi-stage LLM pipeline that can take 5–10 minutes per call. The single-phase tools are much cheaper: analyze_agent_system is one analysis LLM call (23.3 s measured on this host) that returns topology and scored patterns without generating a design, while generate_agent_system and evaluate_agent_system are one large completion each. The long design call is inherent to the workload, not a bug: the generator LLM must process a large input payload — the selected pattern definitions from the 68-pattern catalog, your requirements, and the full output of every previous stage — and produce a large, strictly structured JSON document (agents, relationships, tool contracts, state models, message contracts, quality scores) one token at a time. The design_agent_system pipeline repeats generate → evaluate up to three times, so a single call can comprise 9+ LLM round trips.
The timeout problem
MCP clients (AI coding agents, MCP SDKs) sit between the server and the LLM. Many of them implement a client-side idle timeout: if no data is received on the HTTP connection for some period (typically 30–120 seconds), the client aborts the request. The server is still working — the LLM is still generating — but the client closes the connection and reports a timeout error to the agent.
This is a client-side behaviour, not a server-side one. The server processes the full request correctly; the client simply gives up before the response arrives.
Affected clients (hardcoded short timeouts):
These clients cannot be reconfigured to accept longer timeouts — the timeout is baked into the SDK.
Clients covered by the heartbeat defence:
Works for these because their idle timers are reset by any incoming data — the heartbeat progress notifications sent from a parallel async task on the server are received by the client, resetting its clock.
The heartbeat defence (applied by default)
Every long-running tool emits progress notifications from a parallel coroutine every 30 seconds (configurable via TASKS_HEARTBEAT_INTERVAL_SECONDS). As long as the client resets its idle timer on any received data, the request stays alive for the full duration of the pipeline.
TS-SDK clients (Claude Desktop, Cursor, etc.) do not reset their timeout on progress notifications.
The async job trio (for timeout-constrained clients)
For full control and compatibility with timeout-limited clients, three tools provide a durable job handle:
submit_agent_design_job returns a job_id in milliseconds. The pipeline runs in a background task. Poll get_agent_design_status(job_id) every 10–30 seconds. When status is completed, the full design is in the result field. Cancellation is best-effort — the job exits at the next pipeline stage boundary.
This is the only fix that works for TS-SDK clients (Claude Desktop, Cursor).
The job store is SQLite at ~/.config/agent-pattern-mcp/jobs.db (configurable via AGENT_PATTERN_JOBS_DB).
Bypassing client timeouts with a direct HTTP client
The example client in examples/agent_client.py is a direct Python HTTP client — it is not an MCP agent. It calls the server over HTTP without an MCP SDK, and therefore has no client-side idle timeout: it makes a single blocking request and waits for the full response.
Both targets drive the same direct client (--tool analyze|design). make client-design demonstrates that the server correctly completes long requests — the timeout issue is purely a client-side problem. For production use with MCP agents, the heartbeat defence covers the majority of clients; the async job trio is the universal fallback.
Troubleshooting
Server starts but tools are not visible
- Check the agent's MCP connection: Claude Code
/mcp, OpenCodeopencode mcp list, Codexcodex mcp list - Verify the server process started: compose logs should show
MCPAgentPatternServer initialized - Confirm the TEI embedder is healthy:
docker exec agent-pattern-mcp python -c "import urllib.request; print(urllib.request.urlopen('http://pattern-tei-embed:8080/health').status)"
"Connection refused" or timeout errors
The server waits for the TEI embedder to become healthy:
LLM provider errors (502 / 401)
- Confirm
GENERATOR_API_KEYis set and not expired - Verify
GENERATOR_BASE_URLmatches your provider's endpoint - If using a proxy, check reachability from inside the container
Pattern JSON files not loading
- Files must have
.jsonextension and match*-pattern.json - Required fields:
name,context,category,topology,suitable_domains,quality_attributes(all 7 keys) - Check the startup log for
Pattern validation failedwarnings
Building & Development
Common make targets (full reference: docs/make_rules.md):
Development workflow:
Publishing
All three images are published to two registries simultaneously:
All three images share the same $(DOCKER_TAG) (the version from pyproject.toml), so tei:1.0.3 always ships with mcp:1.0.3. Blob deduplication keeps re-tagging unchanged TEI images cheap.
Bandwidth note: the TEI embedder image is ~5 GB (ONNX fp32 weights baked in). First push to each registry is ~5 GB upload. Subsequent pushes are incremental — only changed layers are transferred.
Prerequisites
Docker Hub — already authenticated locally (docker login).
GitHub Container Registry — requires a classic PAT with write:packages scope. 2FA is not an issue — PATs bypass it. After login the token is discarded; the credential persists in ~/.docker/config.json until you log out.
Publish (one-time setup + per-session)
On subsequent publishes repeat steps 1–3. If your PAT has expired, generate a new one at the link above.
First push — set packages public (GHCR only)
GHCR packages default to private. After the first make docker-publish-all, flip all three packages to public:
Set each to Public and save.
Partial failure recovery
If the push fails mid-way (e.g., GHCR auth was not configured), Docker Hub layers are already uploaded. After fixing auth, re-running make docker-publish-all is safe — each registry reports a cache hit for already-uploaded layers and completes the remaining push. For targeted retries, individual images can be pushed with make docker-publish-tei or make docker-publish-tei-rerank.
systemd Service (Linux)
The server can run as a systemd service on any systemd-based Linux host. It starts the Docker Compose stack automatically at boot.
File layout
The systemd/ directory contains three files:
The production compose file is a deployment variant of docker/docker-compose.yml:
it has no build: sections (images must be pre-built), uses absolute paths, and
lives under /etc/agent-pattern-mcp/ on the host. The systemd-managed
project uses the distinct name agpmcp-systemd — distinct from both the dev
compose and the sibling architecture-pattern-mcp systemd stack
(apmcp-systemd), so neither stack's up -d --remove-orphans treats the
other's container as an orphan.
TEI sidecars are NOT defined in this stack — the
pattern-tei-embedembedder andpattern-tei-rerankreranker containers live in the sharedpattern-tei-infrastack. This stack owns thepattern-tei-sharedDocker network and exposes the sidecars athttp://pattern-tei-embed:8080/v1(embedder) andhttp://pattern-tei-rerank:8080(reranker). The systemd MCP stack joins that network and reaches them by those DNS names.Prerequisite — one-time TEI infra setup:
Start
agent-pattern-mcp.serviceonly AFTERpattern-tei-infra.serviceisactive (running). Seepattern-tei-infra/README.mdfor full details.
Prerequisites
- systemd-based Linux host with Docker (
docker compose version). <user>is in thedockergroup.- Both images pre-built locally (
make docker-build-allfrom the repo). - Shared TEI infra stack installed and enabled (see tei-infra README).
Install
Prebuilt-image shortcut: for the no-build install from Docker Hub (pull + retag, JSON-RPC probe, day-2 operations), see INSTALL.md Path B instead.
Verify
systemctl status shows active (exited) within seconds, but the containers
take up to ~40 s to become healthy (MCP start_period: 40s; TEI readiness
is owned by pattern-tei-infra with start_period: 120s).
The unit does not wait for healthchecks.
Day-to-day
Updating the stack
Uninstall
For full troubleshooting, networking details, and the coexistence guide, see
systemd/README.md.
Verification Program
The repo carries a layered verification program (see docs/verification.md and docs/testing-strategies.md):
Fast gates: make check-all (lint + types + dead code + deps) and
make test-all (unit + oracles). The nightly canary lives in
.github/workflows/verification.yml.
License
MIT License. See LICENSE.
Source: README.md at commit cc23f31
Tools
0Version history
3- v1.0.4LatestOct 10, 2026
- v1.0.3Sep 17, 2026
- v1.0.0Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts