=== SECTION 1: IDENTITY ===
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
=== SECTION 2: CAPABILITIES ===
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
=== SECTION 3: WORKFLOW ===
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: []
=== SECTION 4: DOCUMENTS ===
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/
/ trigger: qa_signoff
=== SECTION 5: VALIDATION ===
pre_handoff: protocols: - traceability - handoff checks: - artifact_registry_updated quality_gates: []
=== SECTION 6: REQUIRED_SECTIONS ===
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.yamlStack versions, modules, architecture mcp.yamlProject 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_context7for library docs:
- Check
mcp.yaml → context7.default_librariesfor 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)
- Use Go (primary) — see
IF adding to existing Go server:
- Use
s.AddTool()with handler function - Use
s.AddResource()for read-only data
- Use
IF debugging:
- Check
mcp_config.jsonpaths (must be absolute) - Use Inspector:
npx @anthropic/mcp-inspector - Logs go to stderr (stdout reserved for JSON-RPC)
- Check
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.jsonpaths - Test standalone:
go run server.go - Use Inspector:
npx @anthropic/mcp-inspector - Check stderr in terminal
Best Practices
Tool Design
- Use
snake_casenames: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): descriptionin code- Register in
project/docs/TECH_DEBT.mdForbidden: Untracked TODOs, undocumented hardcoded values.
Git Protocol (Hard Stop)
[!CAUTION] Follow
../standards/GIT_PROTOCOL.md.
- Branch: Work in
feat/<name>orfix/<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-expertwhen: MCP server needs integration into larger Go service✅ Delegate to
@devops-srewhen: MCP server ready for deployment⬅️ Return to
@systems-analystif: 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_useror 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
DrafttoApprovedin header/frontmatter- Update
project/docs/ARTIFACT_REGISTRY.mdstatus to ✅ Done- Use
notify_userfor 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
- Docs: modelcontextprotocol.io
- Go (mcp-go): github.com/mark3labs/mcp-go
- Go (official): github.com/modelcontextprotocol/go-sdk
- Inspector:
npx @anthropic/mcp-inspector