From mlx
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
npx claudepluginhub damionrashford/mlx --plugin mlxThis skill is limited to using the following tools:
Create MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. The quality of an MCP server is measured by how well it enables LLMs to accomplish real-world tasks.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Create MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. The quality of an MCP server is measured by how well it enables LLMs to accomplish real-world tasks.
Creating a high-quality MCP server involves four main phases:
API Coverage vs. Workflow Tools: Balance comprehensive API endpoint coverage with specialized workflow tools. Workflow tools can be more convenient for specific tasks, while comprehensive coverage gives agents flexibility to compose operations. Performance varies by clientβsome clients benefit from code execution that combines basic tools, while others work better with higher-level workflows. When uncertain, prioritize comprehensive API coverage.
Tool Naming and Discoverability:
Clear, descriptive tool names help agents find the right tools quickly. Use consistent prefixes (e.g., github_create_issue, github_list_repos) and action-oriented naming.
Context Management: Agents benefit from concise tool descriptions and the ability to filter/paginate results. Design tools that return focused, relevant data. Some clients support code execution which can help agents filter and process data efficiently.
Actionable Error Messages: Error messages should guide agents toward solutions with specific suggestions and next steps.
Navigate the MCP specification:
Start with the sitemap to find relevant pages: https://modelcontextprotocol.io/sitemap.xml
Then fetch specific pages with .md suffix for markdown format (e.g., https://modelcontextprotocol.io/specification/draft.md).
Key pages to review:
Recommended stack:
Load framework documentation:
For TypeScript (recommended):
https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.mdFor Python:
https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.mdUnderstand the API: Review the service's API documentation to identify key endpoints, authentication requirements, and data models. Use web search and WebFetch as needed.
Tool Selection: Prioritize comprehensive API coverage. List endpoints to implement, starting with the most common operations.
See language-specific guides for project setup:
Create shared utilities:
For each tool:
Input Schema:
Output Schema:
outputSchema where possible for structured datastructuredContent in tool responses (TypeScript SDK feature)Tool Description:
Implementation:
Annotations:
readOnlyHint: true/falsedestructiveHint: true/falseidempotentHint: true/falseopenWorldHint: true/falseReview for:
TypeScript:
npm run build to verify compilationnpx @modelcontextprotocol/inspectorPython:
python -m py_compile your_server.pySee language-specific guides for detailed testing approaches and quality checklists.
After implementing your MCP server, create comprehensive evaluations to test its effectiveness.
Load β Evaluation Guide for complete evaluation guidelines.
Use evaluations to test whether LLMs can effectively use your MCP server to answer realistic, complex questions.
To create effective evaluations, follow the process outlined in the evaluation guide:
Ensure each question is:
Create an XML file with this structure:
<evaluation>
<qa_pair>
<question>Find discussions about AI model launches with animal codenames. One model needed a specific safety designation that uses the format ASL-X. What number X was being determined for the model named after a spotted wild cat?</question>
<answer>3</answer>
</qa_pair>
<!-- More qa_pairs... -->
</evaluation>
When building an MCP server, the tool API is a contract with LLM agents, not with human developers. Agent cognition differs from human cognition in ways that require different design principles.
If a human engineer can't immediately decide which tool to use in a given situation, an agent can't either.
This is the single most important principle. Tool overlap creates decision paralysis in agents. Signs of over-fragmentation:
Practical ceiling: 10-20 tools per server. Beyond 20, agents make statistically more tool selection errors.
Every tool description must answer four questions. If any are missing, agents will misuse the tool:
@mcp.tool
def search_documents(
query: str,
collection: str = "default",
limit: int = 10
) -> list[dict]:
"""
[WHAT] Performs semantic similarity search over indexed documents.
[WHEN] Use when you need to find documents by meaning or concept,
not exact text match. Use grep_documents for exact string search.
[RETURNS] List of {id, content, score, metadata} dicts ordered by
relevance. Empty list if no matches above threshold 0.7.
[ERRORS] Raises CollectionNotFoundError if collection doesn't exist.
Use list_collections first if unsure.
"""
The most counter-intuitive principle: sometimes fewer, more primitive tools outperform elaborate specialized tools. Reasons:
Ask before adding a specialized tool: does this enable new capabilities, or does it just constrain reasoning the model could handle with bash/filesystem access?
Always use fully-qualified names in MCP: ServerName:tool_name. Without the server prefix, agents fail when multiple MCP servers are active.
# Correct (fully qualified)
server = FastMCP("DataStore") # tools exposed as DataStore:search, DataStore:write
# Correct tool naming pattern
# Verb + noun: search_documents, write_record, delete_entry, list_collections
# NOT: search, get, fetch (too generic β causes collision with other servers)
| Anti-pattern | Problem | Fix |
|---|---|---|
| Overlapping tools | Agent can't decide which to use | Consolidate; make difference explicit in description |
| Missing return format | Agent can't parse output | Specify exact schema in description |
Vague names (get, fetch, process) | Namespace collision across servers | Use ServerName:get_user_record |
| No error documentation | Agent loops on error | Document all exception types and recovery path |
| Too many tools (>20) | Selection error rate spikes | Group into sub-servers; each β€15 tools |
Load these resources as needed during development:
https://modelcontextprotocol.io/sitemap.xml, then fetch specific pages with .md suffixhttps://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.mdhttps://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.mdπ Python Implementation Guide - Complete Python/FastMCP guide with:
@mcp.toolβ‘ TypeScript Implementation Guide - Complete TypeScript guide with:
server.registerTool