Team Sync MCP Server
A self-hosted synchronization hub for frontend and backend teams using Cursor, enabling publishing and reading of shared project state with a local React dashboard.
README
Team Sync MCP Server
A self-hosted synchronization hub for frontend and backend teams using Cursor. It exposes MCP tools for publishing and reading project state, stores everything locally, and serves a small React dashboard for visual inspection.
What It Provides
- A Python MCP server using the official
mcpSDK and Streamable HTTP transport athttp://localhost:8080/mcp. - Shared project state for API contracts, requirements, component specs, and changelog entries.
- SQLite persistence by default, with an optional JSON-file backend.
- REST endpoints for dashboard access at
/api/state,/api/changelog, and/api/events. - A React, Tailwind CSS, and shadcn-style dashboard served at
http://localhost:8080/dashboard/. - Optional shared bearer token for MCP calls and write endpoints.
Quick Start With Docker
docker compose up --build
Open the dashboard:
http://localhost:8080/dashboard/
The SQLite database is stored in ./data through the compose volume.
Local Development
Install and run the Python server:
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
python -m sync_mcp
Run the dashboard in Vite dev mode:
cd dashboard
npm install
npm run dev
The Vite dev server proxies /api to http://localhost:8080.
For a production-like local run:
cd dashboard
npm install
npm run build
cd ..
python -m sync_mcp
Configuration
Copy .env.example to .env or set environment variables directly.
| Variable | Default | Description |
|---|---|---|
SYNC_MCP_PROJECT |
my-project |
Project name displayed in Cursor and the dashboard. |
SYNC_MCP_STORAGE |
sqlite |
Use sqlite or json. |
SYNC_MCP_DATA_DIR |
./data |
Directory for persistent state. |
SYNC_MCP_HOST |
0.0.0.0 |
Server bind host. |
SYNC_MCP_PORT |
8080 |
Server port. |
SYNC_MCP_TOKEN |
empty | Optional shared bearer token for MCP and write access. |
Cursor MCP Configuration
Add the server in Cursor MCP settings. For an open local server:
{
"mcpServers": {
"team-sync": {
"url": "http://localhost:8080/mcp"
}
}
}
If SYNC_MCP_TOKEN is set:
{
"mcpServers": {
"team-sync": {
"url": "http://localhost:8080/mcp",
"headers": {
"Authorization": "Bearer shared-secret"
}
}
}
}
MCP Tools
publish_update(team, type, description, details)
Records a change and updates the aggregated state.
Example after a backend endpoint change:
{
"team": "backend",
"type": "api_added",
"description": "Add user lookup endpoint",
"details": {
"method": "GET",
"path": "/users/:id",
"response": {
"id": "string",
"name": "string"
}
}
}
Useful type values:
api_added,api_changed,api_removedrequirement_added,requirement_changed,requirement_closedcomponent_specchangelogother
get_latest_state()
Returns the current API endpoints, open requirements, component specs, recent changes, and a Cursor-friendly markdown digest.
get_changelog(since, team, type, limit)
Returns recent changes. since accepts either an ISO timestamp or a version number.
subscribe_to_changes()
Returns subscription hints. MCP clients that support resource update notifications can subscribe to:
sync://statesync://changelog
The dashboard uses Server-Sent Events at /api/events.
Dashboard API
curl http://localhost:8080/api/health
curl http://localhost:8080/api/state
curl "http://localhost:8080/api/changelog?team=backend&type=api_added"
Publish through the REST fallback:
curl -X POST http://localhost:8080/api/updates \
-H "Content-Type: application/json" \
-d '{
"team": "frontend",
"type": "requirement_added",
"description": "User payload needs avatar_url",
"details": { "id": "user-avatar", "title": "Expose avatar_url" }
}'
With token auth:
curl -X POST http://localhost:8080/api/updates \
-H "Authorization: Bearer shared-secret" \
-H "Content-Type: application/json" \
-d '{"team":"backend","type":"changelog","description":"Deployed staging build"}'
Team Workflow
- Backend publishes
api_addedorapi_changedfrom Cursor after changing an endpoint. - Frontend starts a session and calls
get_latest_state()or thesync_digestprompt. - Frontend publishes
requirement_addedwhen they need contract changes. - Backend sees the requirement in Cursor or at
http://localhost:8080/dashboard/.
Tests
pip install -e ".[dev]"
pytest
The tests cover state aggregation, changelog filtering, and token enforcement on write endpoints.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.