feat: Add MCP server stubs, development docs, and Docker updates

- Add MCP server skeleton implementations for all 7 planned servers
  (llm-gateway, knowledge-base, git, issues, filesystem, code-analysis, cicd)
- Add comprehensive DEVELOPMENT.md with setup and usage instructions
- Add BACKLOG.md with detailed phase planning
- Update docker-compose.dev.yml with Redis and Celery workers
- Update CLAUDE.md with Syndarix-specific context

Addresses issues #16, #20, #21

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-30 02:13:16 +01:00
parent 2f7124959d
commit 2310c8cdfd
19 changed files with 3060 additions and 2 deletions

View File

@@ -0,0 +1,23 @@
[project]
name = "syndarix-mcp-code-analysis"
version = "0.1.0"
description = "Syndarix Code Analysis MCP Server - AST parsing, linting, type checking"
requires-python = ">=3.12"
dependencies = [
"fastmcp>=0.1.0",
"tree-sitter>=0.21.0",
"redis>=5.0.0",
"pydantic>=2.0.0",
"pydantic-settings>=2.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.23.0",
"ruff>=0.8.0",
]
[tool.ruff]
target-version = "py312"
line-length = 88

View File

@@ -0,0 +1,47 @@
"""
Syndarix Code Analysis MCP Server.
Provides code analysis with:
- AST parsing via tree-sitter
- Linting integration
- Type checking
Phase 5 implementation.
"""
import os
from fastmcp import FastMCP
mcp = FastMCP(
"syndarix-code-analysis",
description="AST parsing, linting, type checking",
)
@mcp.tool()
async def parse_file(project_id: str, path: str) -> dict:
"""Parse a file and return its AST."""
return {"status": "not_implemented", "project_id": project_id}
@mcp.tool()
async def lint_file(project_id: str, path: str) -> dict:
"""Run linting on a file."""
return {"status": "not_implemented", "project_id": project_id}
@mcp.tool()
async def type_check(project_id: str, path: str | None = None) -> dict:
"""Run type checking on file(s)."""
return {"status": "not_implemented", "project_id": project_id}
@mcp.tool()
async def find_references(project_id: str, symbol: str, path: str) -> dict:
"""Find all references to a symbol."""
return {"status": "not_implemented", "project_id": project_id}
if __name__ == "__main__":
mcp.run()