dispatch
Shared multi-model CLI dispatch infrastructure for the adv plugin. Houses dispatch.sh, preflight.sh, run-phase.sh, scope.sh, and…
Create MCP tools — individual tool functions exposed via Model Context Protocol. Use this skill whenever users mention MCP tools, tool handlers, tool functions, tool definitions, or want to add capabilities to an MCP server. Also use when the conversation involves designing tool
Claude Code
$ npx -y skills add andisab/swe-marketplace --skill mcp-tool-dev --agent claude-code
Codex
$ npx skills add andisab/swe-marketplace --skill mcp-tool-dev -a codex -y
Cursor
$ npx skills add andisab/swe-marketplace --skill mcp-tool-dev -a cursor -y
Gemini CLI
$ npx skills add andisab/swe-marketplace --skill mcp-tool-dev -a gemini-cli -y
GitHub Copilot
$ npx skills add andisab/swe-marketplace --skill mcp-tool-dev -a github-copilot -y
OpenCode
$ npx skills add andisab/swe-marketplace --skill mcp-tool-dev -a opencode -y
Windsurf
$ npx skills add andisab/swe-marketplace --skill mcp-tool-dev -a windsurf -y
name: mcp-tool-dev description: > Create MCP tools — individual tool functions exposed via Model Context Protocol. Use this skill whenever users mention MCP tools, tool handlers, tool functions, tool definitions, or want to add capabilities to an MCP server. Also use when the conversation involves designing tool schemas, writing tool descriptions, or implementing tool input validation. Covers FastMCP patterns, Anthropic tool description best practices, and testing strategies. Activate for: - "Create an MCP tool" - "Add a tool to my MCP server" - "Write a tool handler" - "Design a tool schema" - "Implement tool input validation" Do NOT use for: - Creating full MCP servers with multiple tools (use mcp-server-dev) - General API development without MCP - Claude Code slash commands or hooks allowed-tools: Read, Write, Edit, Grep, Glob, mcp__conventions__find_conventions, mcp__conventions__read_convention
Create individual MCP tool functions that follow Anthropic's tool design best practices and the Model Context Protocol specification.
An MCP tool is a single function exposed via the Model Context Protocol that an LLM can invoke. Each tool has:
Tools can be standalone (single-file utilities) or part of an MCP server (grouped related tools).
Every MCP tool consists of four parts:
Use `snake_case` with verb-noun pattern. Be specific — `search_files_by_content` beats `search`.
Write 3-4 sentences covering: 1. What the tool does (capability statement) 2. When to use it (primary use cases) 3. When NOT to use it (scope boundaries, suggest alternatives) 4. Key behavior notes (pagination, rate limits, return format)
Good descriptions prevent misuse and reduce wasted calls. Include parameter semantics — if "query" means regex vs full-text vs exact match, say so.
Define parameters using JSON Schema with:
Async function that:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-server")
@mcp.tool()
async def search_documents(query: str, max_results: int = 10) -> str:
"""Search documents by content.
Performs full-text search across all indexed documents. Use this tool
when the user wants to find documents containing specific terms or phrases.
Do not use for metadata-only searches — use list_documents with filters instead.
Args:
query: Full-text search query. Supports AND/OR operators.
max_results: Maximum results to return (1-100, default 10).
"""
if not query.strip():
return "Error: query cannot be empty. Provide a search term."
max_results = min(max(1, max_results), 100)
results = await do_search(query, max_results)
return format_results(results)FastMCP infers the JSON Schema from the function signature and docstring. Type hints drive the schema; the docstring `Args:` section populates parameter descriptions.
Define what the tool does before writing code:
For FastMCP, the schema is implicit in the function signature. For manual schemas:
TOOL_SCHEMA = {
"name": "search_documents",
"description": "Search documents by content...",
"inputSchema": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Full-text search query"},
"max_results": {"type": "integer", "default": 10, "minimum": 1, "maximum": 100}
},
"required": ["query"]
}
}Write the async handler function. Key principles:
Test the handler directly by calling it with a dict:
async def test_search_documents():
result = await search_documents("test query", max_results=5)
assert "results" in result.lower() or isinstance(result, str)
async def test_search_documents_empty_query():
result = await search_documents("")
assert "error" in result.lower()Use `templates/mcp-tool-template.py` as a starting point. It includes the FastMCP decorator pattern, input validation, conten
A collection of Claude Code plugins for everyday software engineering and knowledge work.
Shared multi-model CLI dispatch infrastructure for the adv plugin. Houses dispatch.sh, preflight.sh, run-phase.sh, scope.sh, and…
Use this skill when creating or refining Claude Code sub-agent definitions. Helps design specialized AI assistants with proper…
Use this skill when creating or refining custom Claude Code slash commands. Slash commands are user-invoked reusable prompts that…
Use this skill when creating or refining Claude Code hooks. Hooks are shell commands that execute at specific lifecycle events…
Create MCP servers — multi-tool services exposed via Model Context Protocol. Use this skill whenever users mention MCP servers,…
Use this skill when creating or refining Claude Code plugins. Plugins are bundled collections of agents, skills, commands, hooks,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.