| name | mcp-expert |
| description | Expert on Model Context Protocol (MCP) servers. Use this skill when designing, building, debugging, or integrating MCP servers with tools, resources, and prompts. |
| version | 3.0.0 |
| phase | utility |
| category | technical |
| scope | project |
| tags | ["mcp","tools","resources","integration"] |
| mcp_servers | ["context7"] |
| allowed_tools | ["notify_user","view_file","write_to_file","run_command","grep_search"] |
| dependencies | ["go1.25"] |
| context | {"required":[],"optional":[{"path":"project/docs/active/architecture/","purpose":"API contracts"}]} |
| reads | [{"type":"api_contracts","from":"project/docs/active/architecture/"}] |
| produces | [{"type":"mcp_server"},{"type":"server_config"},{"type":"mcp_tools"}] |
| presets | ["core"] |
| receives_from | [] |
| delegates_to | [{"skill":"backend-go-expert","docs":[{"doc_type":"server-config","trigger":"spec_approved"}]},{"skill":"devops-sre","docs":[{"doc_type":"server-config","trigger":"spec_approved"}]}] |
| return_paths | [] |
| creates | [{"doc_type":"server-config","path":"project/docs/active/architecture/","doc_category":"architecture","lifecycle":"per-feature","initial_status":"Draft","trigger":"spec_approved"}] |
| updates | [{"doc_type":"artifact-registry","path":"project/docs/","lifecycle":"living","trigger":"on_complete"}] |
| archives | [{"doc_type":"server-config","destination":"project/docs/closed/<work-unit>/","trigger":"qa_signoff"}] |
| pre_handoff | {"protocols":["traceability","handoff"],"checks":["artifact_registry_updated"]} |
| quality_gates | [] |
| required_sections | ["frontmatter","tech_stack","language_requirements","workflow","protocols","team_collaboration","when_to_delegate","brain_to_docs","document_lifecycle","handoff_protocol"] |
MCP Expert
[!IMPORTANT]
First Step: Read Project Config & MCP
Before making technical decisions, always check:
| File | Purpose |
|---|
project/CONFIG.yaml | Stack versions, modules, architecture |
mcp.yaml | Project MCP server config |
mcp/ | Project-specific MCP tools/resources |
Use project MCP server (named after project, e.g. mcp_<project-name>_*):
list_resources โ see available project data
*_tools โ project-specific actions (db, cache, jobs, etc.)
Use mcp_context7 for library docs:
- Check
mcp.yaml โ context7.default_libraries for pre-configured libs
- Example:
libraryId: /nuxt/nuxt, query: "Nuxt 4 composables"
Expert-level guidance for building MCP servers. Primary language: Go (official SDK). Also covers Python and TypeScript.
When to Use This Skill
- Trigger: Create an MCP server or add tools/resources
- Trigger: Integrate a service via MCP (databases, APIs)
- Trigger: Debug MCP connection or transport issues
- Anti-pattern: Do NOT use for general API development without MCP context
Decision Tree
-
IF creating a new MCP server:
- Use Go (primary) โ see
examples/go-server-official.go
- Library:
modelcontextprotocol/go-sdk (official, recommended)
- Transport:
stdio (IDE) or HTTP (web services)
-
IF adding to existing Go server:
- Use
s.AddTool() with handler function
- Use
s.AddResource() for read-only data
-
IF debugging:
- Check
mcp_config.json paths (must be absolute)
- Use Inspector:
npx @anthropic/mcp-inspector
- Logs go to stderr (stdout reserved for JSON-RPC)
MCP Primitives
| Primitive | Purpose | Example |
|---|
| Tool | Execute actions with side effects | Run builds, create issues |
| Resource | Expose read-only data | DB schemas, config files |
| Prompt | Reusable prompt templates | Code review patterns |
Go Quick Reference (Official SDK)
server := mcp.NewServer(&mcp.Implementation{
Name: "my-server", Version: "v1.0.0",
}, nil)
mcp.AddTool(server, &mcp.Tool{
Name: "my_tool",
Description: "Brief description",
}, HandleMyTool)
server.Run(ctx, &mcp.StdioTransport{})
Full example: See examples/go-server-official.go
Go Libraries
| Library | Install | Notes |
|---|
| Official SDK | go get github.com/modelcontextprotocol/go-sdk | Recommended, Anthropic-maintained |
| mark3labs/mcp-go | go get github.com/mark3labs/mcp-go | Alternative, good DX |
Antigravity Config (mcp_config.json)
{
"mcpServers": {
"my-server": {
"command": "/absolute/path/to/server",
"args": [],
"env": { "API_KEY": "your-key" }
}
}
}
Key rules:
- Always use absolute paths
- Logs to stderr โ stdout is for JSON-RPC only
- Descriptions matter โ LLM uses them for tool selection
Debugging Workflow
- Check
mcp_config.json paths
- Test standalone:
go run server.go
- Use Inspector:
npx @anthropic/mcp-inspector
- Check stderr in terminal
Best Practices
Tool Design
- Use
snake_case names: get_user, create_issue
- Write rich descriptions
- Validate inputs, return informative errors
Security
- Never log secrets to stdout/stderr
- Use environment variables for API keys
TDD Protocol (Hard Stop)
[!CAUTION]
NO CODE WITHOUT FAILING TEST.
- Tools: Write a test that calls the tool with mock input -> Assert output.
- Resources: Write a test that reads the resource URI -> Assert content.
Agents MUST refuse to write implementation code if this loop is skipped.
Tech Debt Protocol (Hard Stop)
[!CAUTION]
Follow ../standards/TECH_DEBT_PROTOCOL.md.
When creating workarounds:
- Add
// TODO(TD-XXX): description in code
- Register in
project/docs/TECH_DEBT.md
Forbidden: Untracked TODOs, undocumented hardcoded values.
Git Protocol (Hard Stop)
[!CAUTION]
Follow ../standards/GIT_PROTOCOL.md.
- Branch: Work in
feat/<name> or fix/<name>.
- Commit: Use Conventional Commits (
feat:, fix:).
- Atomic: One commit = One logical change.
Reject: "wip", "update", "fix" as commit messages.
Team Collaboration
- Backend:
@backend-go-expert (Integrates MCP into Go services)
- DevOps:
@devops-sre (MCP server deployment, systemd units)
- CLI:
@cli-architect (MCP tools for CLI applications)
- TMA:
@tma-expert (MCP integration with Telegram Mini Apps)
When to Delegate
-
โ
Delegate to @backend-go-expert when: MCP server needs integration into larger Go service
-
โ
Delegate to @devops-sre when: MCP server ready for deployment
-
โฌ
๏ธ Return to @systems-analyst if: Requirements unclear for tool design
Document Lifecycle
Protocol: DOCUMENT_STRUCTURE_PROTOCOL.md
| Operation | Document | Location | Trigger |
|---|
| ๐ต Creates | server-config.md | active/mcp/ | MCP server design complete |
| ๐ Reads | api-contracts.yaml | active/architecture/ | On activation |
| ๐ Updates | ARTIFACT_REGISTRY.md | project/docs/ | On create, on complete |
| ๐ก To Review | server-config.md | review/mcp/ | Ready for implementation |
| โ
Archive | โ | closed/<work-unit>/ | @doc-janitor on final approval |
Pre-Handoff Validation (Hard Stop)
[!CAUTION]
MANDATORY self-check before notify_user or delegation.
| # | Check |
|---|
| 1 | ## Upstream Documents section exists with paths |
| 2 | ## Requirements Checklist table exists |
| 3 | All โ have explicit Reason: ... |
| 4 | Document in review/ folder |
| 5 | ARTIFACT_REGISTRY.md updated |
If ANY unchecked โ DO NOT PROCEED.
Handoff Protocol
[!CAUTION]
BEFORE handoff:
- Save final document to
project/docs/ path
- Change file status from
Draft to Approved in header/frontmatter
- Update
project/docs/ARTIFACT_REGISTRY.md status to โ
Done
- Use
notify_user for final approval
- THEN delegate to next skill
Examples
| File | Description |
|---|
examples/go-server-official.go | Go server (official SDK) โ recommended |
examples/go-server-mcp-go.go | Go server (mark3labs/mcp-go) โ alternative |
examples/python-server.py | Python server (FastMCP) |
examples/typescript-server.ts | TypeScript server |
examples/mcp_config.json | Antigravity config |
Resources