# Syndarix MCP Servers

Model Context Protocol (MCP) servers providing tool access for Syndarix agents.

Per [ADR-005](../docs/adrs/ADR-005-mcp-integration.md), 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:
1. Exposes tools via Model Context Protocol
2. Requires `project_id` for all operations (explicit scoping)
3. Uses Redis for pub/sub communication with agents
4. 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.

```bash
# 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:

```python
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.
