mcpbeat

MCP Patterns

aiskillstore/mcp-patterns

Model Context Protocol (MCP) server patterns for building integrations with Claude Code. Triggers on: mcp server, model context protocol, tool handler, mcp resource, mcp tool.

This is a copy. The original lives at comeonoliver/mcp-patterns.

14k tokens
context cost
the whole folder, loaded on every use
7
files
instructions only
0
copies elsewhere
how many repositories repackaged it
404
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/aiskillstore/marketplace --skill mcp-patterns

What comes with it

50 670 bytes besides the instruction
references/auth-patterns.md
references/resource-patterns.md
references/state-patterns.md
references/testing-patterns.md
references/tool-patterns.md
skill-report.json

The instruction itself

10 sections, as written by the author

MCP Patterns

Model Context Protocol (MCP) server patterns for building integrations with Claude Code.

Basic MCP Server (Python)

from mcp.server import Server
from mcp.server.stdio import stdio_server

app = Server("my-server")

@app.list_tools()
async def list_tools():
    return [
        {
            "name": "my_tool",
            "description": "Does something useful",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "Search query"}
                },
                "required": ["query"]
            }
        }
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "my_tool":
        result = await do_something(arguments["query"])
        return {"content": [{"type": "text", "text": result}]}
    raise ValueError(f"Unknown tool: {name}")

async def main():
    async with stdio_server() as (read_stream, write_stream):
        await app.run(read_stream, write_stream, app.create_initialization_options())

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

Project Layout

my-mcp-server/
├── src/
│   └── my_server/
│       ├── __init__.py
│       ├── server.py       # Main server logic
│       ├── tools.py        # Tool handlers
│       └── resources.py    # Resource handlers
├── pyproject.toml
└── README.md

Claude Desktop Configuration

Basic Configuration

{
  "mcpServers": {
    "my-server": {
      "command": "python",
      "args": ["-m", "my_server"],
      "env": {
        "MY_API_KEY": "your-key-here"
      }
    }
  }
}
{
  "mcpServers": {
    "my-server": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/my-server", "python", "-m", "my_server"],
      "env": {
        "MY_API_KEY": "your-key-here"
      }
    }
  }
}

Quick Reference

| Pattern | Use Case | Reference |

|---------|----------|-----------|

| Tool validation | Input sanitization with Pydantic | ./references/tool-patterns.md |

| Error handling | Graceful failure responses | ./references/tool-patterns.md |

| Multiple tools | CRUD-style tool registration | ./references/tool-patterns.md |

| Static resources | Config/settings exposure | ./references/resource-patterns.md |

| Dynamic resources | Database-backed resources | ./references/resource-patterns.md |

| Environment auth | API key from env vars | ./references/auth-patterns.md |

| OAuth tokens | Token refresh with TTL | ./references/auth-patterns.md |

| SQLite cache | Persistent state storage | ./references/state-patterns.md |

| In-memory cache | TTL-based caching | ./references/state-patterns.md |

| Manual testing | Quick validation script | ./references/testing-patterns.md |

| pytest async | Unit tests for tools | ./references/testing-patterns.md |

Common Issues

| Issue | Solution |

|-------|----------|

| Server not starting | Check command path, ensure dependencies installed |

| Tool not appearing | Verify list_tools() returns valid schema |

| Auth failures | Check env vars are set in config, not shell |

| Timeout errors | Add timeout to httpx calls, use async properly |

| JSON parse errors | Ensure call_tool returns proper content structure |

Official Documentation

  • https://modelcontextprotocol.io - MCP specification
  • https://modelcontextprotocol.io/docs/concepts/tools - Tools reference
  • https://modelcontextprotocol.io/docs/concepts/resources - Resources reference
  • https://github.com/modelcontextprotocol/python-sdk - Python SDK
  • https://github.com/modelcontextprotocol/servers - Official MCP servers

Additional Resources

For detailed patterns, load:

  • ./references/tool-patterns.md - Validation, error handling, multi-tool registration
  • ./references/resource-patterns.md - Static and dynamic resource exposure
  • ./references/auth-patterns.md - Environment variables, OAuth token refresh
  • ./references/state-patterns.md - SQLite persistence, in-memory caching
  • ./references/testing-patterns.md - Manual test scripts, pytest async patterns

How to use it

Copy the folder

Take aiskillstore/mcp-patterns from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.