forked from cardosofelipe/fast-next-template
Core MCP client implementation with comprehensive tooling:
**Services:**
- MCPClientManager: Main facade for all MCP operations
- MCPServerRegistry: Thread-safe singleton for server configs
- ConnectionPool: Connection pooling with auto-reconnection
- ToolRouter: Automatic tool routing with circuit breaker
- AsyncCircuitBreaker: Custom async-compatible circuit breaker
**Configuration:**
- YAML-based config with Pydantic models
- Environment variable expansion support
- Transport types: HTTP, SSE, STDIO
**API Endpoints:**
- GET /mcp/servers - List all MCP servers
- GET /mcp/servers/{name}/tools - List server tools
- GET /mcp/tools - List all tools from all servers
- GET /mcp/health - Health check all servers
- POST /mcp/call - Execute tool (admin only)
- GET /mcp/circuit-breakers - Circuit breaker status
- POST /mcp/circuit-breakers/{name}/reset - Reset circuit breaker
- POST /mcp/servers/{name}/reconnect - Force reconnection
**Testing:**
- 156 unit tests with comprehensive coverage
- Tests for all services, routes, and error handling
- Proper mocking and async test support
**Documentation:**
- MCP_CLIENT.md with usage examples
- Phase 2+ workflow documentation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
from fastapi import APIRouter
|
|
|
|
from app.api.routes import (
|
|
admin,
|
|
agent_types,
|
|
agents,
|
|
auth,
|
|
events,
|
|
issues,
|
|
mcp,
|
|
oauth,
|
|
oauth_provider,
|
|
organizations,
|
|
projects,
|
|
sessions,
|
|
sprints,
|
|
users,
|
|
)
|
|
|
|
api_router = APIRouter()
|
|
api_router.include_router(auth.router, prefix="/auth", tags=["Authentication"])
|
|
api_router.include_router(oauth.router, prefix="/oauth", tags=["OAuth"])
|
|
api_router.include_router(
|
|
oauth_provider.router, prefix="/oauth", tags=["OAuth Provider"]
|
|
)
|
|
api_router.include_router(users.router, prefix="/users", tags=["Users"])
|
|
api_router.include_router(sessions.router, prefix="/sessions", tags=["Sessions"])
|
|
api_router.include_router(admin.router, prefix="/admin", tags=["Admin"])
|
|
api_router.include_router(
|
|
organizations.router, prefix="/organizations", tags=["Organizations"]
|
|
)
|
|
# SSE events router - no prefix, routes define full paths
|
|
api_router.include_router(events.router, tags=["Events"])
|
|
|
|
# MCP (Model Context Protocol) router
|
|
api_router.include_router(mcp.router, prefix="/mcp", tags=["MCP"])
|
|
|
|
# Syndarix domain routers
|
|
api_router.include_router(projects.router, prefix="/projects", tags=["Projects"])
|
|
api_router.include_router(
|
|
agent_types.router, prefix="/agent-types", tags=["Agent Types"]
|
|
)
|
|
# Issues router - routes include /projects/{project_id}/issues paths
|
|
api_router.include_router(issues.router, tags=["Issues"])
|
|
# Agents router - routes include /projects/{project_id}/agents paths
|
|
api_router.include_router(agents.router, tags=["Agents"])
|
|
# Sprints router - routes need prefix as they use /projects/{project_id}/sprints paths
|
|
api_router.include_router(
|
|
sprints.router, prefix="/projects/{project_id}/sprints", tags=["Sprints"]
|
|
)
|