CtrlK
BlogDocsLog inGet started
Tessl Logo

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.

Install with Tessl CLI

npx tessl i github:NeverSight/skills_feed --skill mcp-patterns
What are skills?

83

Does it follow best practices?

Validation for skill structure

SKILL.md
Review
Evals

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"
      }
    }
  }
}

With uv (Recommended)

{
  "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

PatternUse CaseReference
Tool validationInput sanitization with Pydantic./references/tool-patterns.md
Error handlingGraceful failure responses./references/tool-patterns.md
Multiple toolsCRUD-style tool registration./references/tool-patterns.md
Static resourcesConfig/settings exposure./references/resource-patterns.md
Dynamic resourcesDatabase-backed resources./references/resource-patterns.md
Environment authAPI key from env vars./references/auth-patterns.md
OAuth tokensToken refresh with TTL./references/auth-patterns.md
SQLite cachePersistent state storage./references/state-patterns.md
In-memory cacheTTL-based caching./references/state-patterns.md
Manual testingQuick validation script./references/testing-patterns.md
pytest asyncUnit tests for tools./references/testing-patterns.md

Common Issues

IssueSolution
Server not startingCheck command path, ensure dependencies installed
Tool not appearingVerify list_tools() returns valid schema
Auth failuresCheck env vars are set in config, not shell
Timeout errorsAdd timeout to httpx calls, use async properly
JSON parse errorsEnsure 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
Repository
NeverSight/skills_feed
Last updated
Created

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.