moai-connector-mcp

MCP Server Development Framework

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "moai-connector-mcp" with this command: npx skills add rdmptv/adbautoplayer/rdmptv-adbautoplayer-moai-connector-mcp

Quick Reference

MCP Server Development Framework

What it does: Comprehensive guide to building, testing, and deploying custom MCP (Model Context Protocol) servers using FastMCP framework for exposing tools, resources, and prompts to Claude and other AI models.

Core Capabilities:

  • ✅ FastMCP server development with type-safe decorators

  • ✅ Tool/Resource/Prompt architecture patterns

  • ✅ Pydantic validation and error handling

  • ✅ OAuth2 & API Key authentication patterns

  • ✅ Performance monitoring and health checks

  • ✅ Docker & Kubernetes deployment

  • ✅ Testing strategies and validation

  • ✅ Production-grade patterns (caching, circuit breaker, rate limiting)

When to Use:

  • Building custom MCP servers for internal tools

  • Exposing existing services via MCP protocol

  • Implementing enterprise authentication patterns

  • Deploying MCP servers in production environments

  • Optimizing server performance and reliability

  • Testing MCP server implementations

Implementation Guide

Getting Started with FastMCP

Installation:

pip install fastmcp

Minimum Server:

from fastmcp import FastMCP

server = FastMCP("my-server")

@server.tool() def hello_world(name: str) -> str: """Greet someone.""" return f"Hello, {name}!"

if name == "main": server.run()

Core Concepts:

  • Tools: Functions Claude can invoke with validated parameters

  • Resources: URI-based data endpoints for exposing information

  • Prompts: Reusable conversation templates and system prompts

Detailed guide: getting-started.md

MCP Server Architecture

Three-Component Pattern:

┌─────────────────────────────────────────┐ │ MCP Server (FastMCP) │ ├─────────────────────────────────────────┤ │ Tools (Functions) │ │ • @server.tool() decorator │ │ • Pydantic validation │ │ • Workflow-optimized naming │ │ │ │ Resources (Data Endpoints) │ │ • @server.resource("uri://...") decor │ │ • Streaming support │ │ • Permission-based access │ │ │ │ Prompts (Templates) │ │ • @server.prompt("name") decorator │ │ • Parameter injection │ │ • Multi-turn workflows │ └─────────────────────────────────────────┘ ↓ MCP Protocol (JSON-RPC 2.0) ↓ ┌─────────────────────────────────────────┐ │ Claude / LLM Client │ └─────────────────────────────────────────┘

Design Patterns: server-design.md

Production-Ready Server Example

from fastmcp import FastMCP from pydantic import Field from typing import Literal, Optional

server = FastMCP("enterprise-database-server")

@server.tool() def search_records( query: str, table: Literal["users", "products", "orders"], limit: int = Field(default=10, ge=1, le=100), filters: Optional[dict] = None ) -> dict: """ Search database records with pagination.

Args:
    query: Search query string
    table: Table to search
    limit: Max results (1-100)
    filters: Optional filter criteria

Returns:
    Dict with results and metadata
"""
if not query or not query.strip():
    raise ValueError("Query cannot be empty")

results = execute_search(query, table, limit, filters)
return {
    "status": "success",
    "count": len(results),
    "results": results,
    "total_available": get_total_count(query)
}

@server.resource("db://{table}/{id}") def get_record(table: str, id: str) -> dict: """Fetch record by ID.""" record = fetch_record(table, id) if not record: raise ValueError(f"Record not found: {table}/{id}") return record

if name == "main": server.run()

Implementation Guide: implementation.md

Authentication Patterns

OAuth2 (User-Authenticated):

from fastmcp.auth import OAuth2Provider

oauth = OAuth2Provider( authorize_url="https://auth.company.com/authorize", token_url="https://auth.company.com/token", scopes=["read:data", "write:data"] )

@server.auth(oauth) @server.tool() def protected_action(user_id: str) -> dict: """Requires OAuth token.""" return execute_action(user_id)

API Key (Service-to-Service):

from fastmcp.auth import APIKeyAuth

api_auth = APIKeyAuth(header="X-API-Key")

@server.auth(api_auth) @server.resource("secure://{resource_id}") def secure_resource(resource_id: str) -> str: """Requires API key.""" return fetch_data(resource_id)

Detailed Patterns: auth-patterns.md

Testing MCP Servers

Unit Testing:

import pytest from fastmcp import FastMCP

@pytest.fixture def server(): s = FastMCP("test-server")

@s.tool()
def add(a: int, b: int) -> int:
    return a + b

return s

def test_add_tool(server): result = server.invoke_tool("add", {"a": 2, "b": 3}) assert result == 5

def test_invalid_params(server): with pytest.raises(ValueError): server.invoke_tool("add", {"a": "not-a-number", "b": 3})

Testing Guide: testing.md

Deployment

Docker:

FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY server.py . EXPOSE 8000 CMD ["python", "server.py"]

Kubernetes:

apiVersion: apps/v1 kind: Deployment metadata: name: mcp-server spec: replicas: 3 selector: matchLabels: app: mcp-server template: metadata: labels: app: mcp-server spec: containers: - name: mcp-server image: mcp-server:latest ports: - containerPort: 8000 livenessProbe: httpGet: path: /health port: 8000 initialDelaySeconds: 10 periodSeconds: 10

Deployment Guide: deployment.md

Advanced Patterns

Tool Design Best Practices

✅ DO:

  • Design tools for single meaningful workflow steps

  • Validate all inputs with Pydantic Field constraints

  • Provide clear, actionable error messages

  • Use pagination for large result sets

  • Include comprehensive docstrings

❌ DON'T:

  • Mix multiple responsibilities in one tool

  • Return unlimited result sets

  • Skip input validation

  • Expose sensitive data

  • Ignore error handling

Tool Design Guide: tool-design.md

Performance Optimization

Caching Strategy:

from functools import wraps from datetime import datetime, timedelta

class MCPCache: def init(self, ttl_seconds=300): self.cache = {} self.ttl = ttl_seconds

def cached(self, func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        key = str((func.__name__, args, kwargs))
        if key in self.cache:
            value, timestamp = self.cache[key]
            if (datetime.now() - timestamp).total_seconds() < self.ttl:
                return value

        result = func(*args, **kwargs)
        self.cache[key] = (result, datetime.now())
        return result
    return wrapper

cache = MCPCache(ttl_seconds=600)

@cache.cached def expensive_operation(param: str) -> dict: return fetch_and_process(param)

Advanced Patterns:

  • Caching

  • Circuit Breaker

  • Rate Limiting

Monitoring & Observability

Health Checks:

@server.resource("health://status") def health_check() -> dict: """Server health status.""" return { "status": "healthy", "version": "1.0.0", "uptime_seconds": get_uptime(), "active_connections": get_connection_count() }

Metrics & Logging:

import logging import time

logger = logging.getLogger(name)

@server.tool() def monitored_operation(params: dict) -> dict: start = time.time() try: result = execute_operation(params) duration = time.time() - start logger.info(f"Operation completed in {duration:.2f}s") return result except Exception as e: logger.error(f"Operation failed: {str(e)}") raise

Monitoring Guide: monitoring.md

Works Well With

  • moai-context7-integration

  • Documentation access for API patterns

  • moai-cc-configuration

  • MCP server configuration management

  • moai-essentials-debug

  • Server debugging and troubleshooting

  • moai-domain-backend

  • Backend service architecture

  • moai-domain-cloud

  • Cloud deployment patterns

  • moai-quality-security

  • Security validation and OWASP compliance

Core Concepts

  • FastMCP Framework: Python library for rapid MCP server development

  • Type Safety: Pydantic models ensure Claude understands parameter constraints

  • Workflow Design: Tools for single meaningful tasks, not granular APIs

  • Authentication Strategy: OAuth2 for user apps, API keys for service-to-service

  • Production Readiness: Monitoring, health checks, error handling, caching

  • Testing: Comprehensive test coverage before deployment

Module Navigation

Getting Started:

  • getting-started.md - FastMCP basics

Core Development:

  • server-design.md - Architecture patterns

  • implementation.md - Real examples

  • testing.md - Test strategies

Deployment & Operations:

  • deployment.md - Docker/Kubernetes

Advanced Patterns (modules/development/patterns/):

  • tool-design.md - Tool best practices

  • resource-design.md - Resource patterns

  • auth-patterns.md - Authentication

  • monitoring.md - Observability

  • caching.md - Cache strategies

  • circuit-breaker.md - Resilience

  • rate-limiting.md - Rate control

Changelog

  • v3.0.0 (2025-11-27): Complete restructure from server integration to server development focus, modularized with development patterns

  • v2.1.0 (2025-11-22): Modularized structure - SKILL.md refactored, reference.md and examples.md added

  • v2.0.0 (2025-11-22): MCP 1.0+ protocol complete spec update

  • v1.0.0 (2025-11-21): Initial MCP integration skill

Status: Production Ready | See modules/development/ for detailed patterns | Last Updated: 2025-11-27

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

moai-toolkit-codegen

No summary provided by upstream source.

Repository SourceNeeds Review
General

moai-domain-adb

No summary provided by upstream source.

Repository SourceNeeds Review
General

macos-resource-optimizer

No summary provided by upstream source.

Repository SourceNeeds Review
General

decision-logic-framework

No summary provided by upstream source.

Repository SourceNeeds Review