agent-kit
A provider-neutral MCP server that provides tools for managing skills, agents, references, and artifact memory in a local workspace.
README
agent-kit
A provider-neutral agent kit and a local artifact-memory substrate for a personal multi-repo workspace.
Two things live here:
- A knowledge kit — skills, agents, entrypoints and references maintained once, compiled into per-provider packs (Claude Code, Codex CLI, OpenCode) by generators, and served to a Claude Code session over MCP.
- An artifact-memory substrate — a local pipeline that catalogs the workspace's canonical Markdown, chunks it into an immutable outbox, embeds it locally, and serves semantic search from a loopback Qdrant behind a resident Unix-socket service. Nothing leaves the machine.
Design rules
- Canonical Markdown is the source of truth. The search index is derived — a discovery hint, never an authority. Retrieve the real file before acting.
- Derived state is rebuildable; canonical state is never rewritten to fix an index.
- Fail closed. A hash mismatch, a missing build manifest, an incomplete backup: each stops the pipeline and says so rather than shipping something unverified.
- Local embeddings only. A pinned ONNX model (
all-MiniLM-L6-v2, 384-dim) loaded from a digest-checked local snapshot; runtime downloads are refused.
⚠️ The rebuild rule — read before editing src/
The registered server command runs the compiled output (node dist/index.js), not
the TypeScript source. An edit under src/ is invisible until you npm run build and
restart the Claude Code session (the MCP server is spawned per session). npm run dev
runs the source directly, but that is not what Claude Code launches.
Content under data/ is loaded once at server startup — no hot reload, but no
rebuild needed either. Restart the session after editing it.
Architecture
canonical Markdown
├─────────────► artifact_catalog.py ──► catalog (sqlite, exact sha256)
│ │
skills │ emit receipts ▼
│ artifact_ingestion.py ──► immutable gzip-JSONL outbox
▼ │
skill-events/ ──► artifact_event_consumer.py ────┤ (checkpointed, dead-lettered)
▼
Qdrant (loopback, API-keyed)
│
artifact_memory_service.py (resident, UDS)
│
MCP tools ──┘ search_artifacts / get_artifact
Support plane: an external watchdog (a dead consumer cannot announce its own death),
a composite health watermark, an age-encrypted off-device backup with a fail-closed
--verify, a reversible quarantine, and a retention classifier that defaults to RETAIN.
MCP tools (17)
| Group | Tools |
|---|---|
| Skills / agents | list_skills, get_skill, list_agents, get_agent |
| References | list_references, get_reference |
| Context guides | list_context_guides, get_context_guide |
| Memory (local, private) | list_memory, get_memory, search_memory |
| Search | search_platform_knowledge |
| Artifact memory | artifact_memory_status, search_artifacts, get_artifact, query_temporal_facts |
| Diagnostics | get_token_stats |
All are read-only. The server exposes exactly one transport (stdio); a static tripwire test fails if an HTTP/SSE transport is ever imported.
Under SERVER_PROFILE=shared the personal-memory tier is excluded from both the search
index and the memory tools, and the artifact-memory tools are not registered at all.
Quick start
npm ci && npm run build
claude mcp add agent-kit -- node /abs/path/to/agent-kit/dist/index.js
The substrate is separate and optional — see
workspace-tooling/README.md for provisioning
(Docker + Qdrant + a Python 3.12 venv from the pinned lockfile).
Testing
npm test # MCP contract + golden tool list + transport lock
python3 -m unittest discover -s workspace-tooling/tests \
-p 'test_*.py' -t workspace-tooling/tests # substrate suite (~590 tests)
# the four generator gates — all must be clean before committing data/ changes
python3 data/scripts/catalog-generate.py --check
python3 data/scripts/generate-adapter-packs.py --check
python3 data/scripts/generate-root-contract.py --check
python3 data/scripts/model-policy-apply.py --check
AGENTS.md and CONTEXT.md are generated — edit the coverage map, then regenerate.
Layout
| Path | What |
|---|---|
src/ |
MCP server (TypeScript → dist/) |
data/skills, data/agents, data/commands, data/references |
the knowledge base |
data/scripts |
generators, validators, pipeline tooling |
data/hooks |
PreToolUse guards (incl. the plaintext-credential blocker) |
workspace-tooling/ |
the artifact-memory substrate + its tests |
Provenance
This kit began as a personal fork of an internal tool I built at work, then was genericized: the employer-specific integrations, infrastructure facts, and operational tooling were removed, and the remaining machinery renamed. What is left is the general architecture — the generators, the guard, the memory substrate — plus content I use on my own projects.
src/security/aidefence-rules.ts transcribes detection patterns from
ruflo (MIT) as data; see that file's header for the
attribution and the one deliberate deviation.
Requirements
Node ≥ 20 · Python 3.12 (substrate only) · Docker (Qdrant, substrate only)
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。