forked from cardosofelipe/fast-next-template
- Introduced `format-check` for verification without modification in `llm-gateway` and `knowledge-base` Makefiles. - Updated `validate` to include `format-check`. - Added `format-all` to root Makefile for consistent formatting across all components. - Unexported `VIRTUAL_ENV` to prevent virtual environment warnings.
Syndarix MCP Servers
Model Context Protocol (MCP) servers providing tool access for Syndarix agents.
Per ADR-005, all tools require explicit project scoping.
Server Overview
| Server | Priority | Purpose | Phase |
|---|---|---|---|
| llm-gateway | 1 | LLM routing with failover and cost tracking | Phase 2 |
| knowledge-base | 2 | RAG with pgvector for semantic search | Phase 2 |
| git | 3 | Git operations (clone, commit, push, PR) | Phase 2 |
| issues | 4 | Issue tracker sync (Gitea, GitHub, GitLab) | Phase 2 |
| filesystem | 5 | Sandboxed file operations | Phase 5 |
| code-analysis | 6 | AST parsing, linting, type checking | Phase 5 |
| cicd | 7 | CI/CD pipeline management | Phase 5 |
Architecture
Each MCP server is a FastMCP application that:
- Exposes tools via Model Context Protocol
- Requires
project_idfor all operations (explicit scoping) - Uses Redis for pub/sub communication with agents
- Logs all operations to PostgreSQL for audit
┌─────────────────────────────────────────────────────────────┐
│ Agent Runner │
│ │ │
│ ┌─────────────┼─────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ LLM GW │ │ Git │ │ Issues │ ... (7 total) │
│ │ MCP │ │ MCP │ │ MCP │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
Running Locally
Each MCP server runs as a separate Docker container. See docker-compose.dev.yml for configuration.
# Start all MCP servers (Phase 2+)
docker-compose -f docker-compose.dev.yml up -d llm-gateway knowledge-base git issues
# View logs
docker-compose logs -f llm-gateway
Development
Each server follows the FastMCP pattern:
from fastmcp import FastMCP
mcp = FastMCP("server-name")
@mcp.tool()
def my_tool(project_id: str, ...):
"""Tool with required project scoping."""
# Validate project access
# Execute operation
# Log for audit
pass
See individual server READMEs for specific tool documentation.