MCP server for tangled
1# tangled-mcp notes
2
3## dependencies
4- `uv add` only (NEVER `uv pip`)
5- atproto from PR #605 (service auth)
6- pydantic warning filtered (upstream atproto issue #625)
7
8## deployment
9- **primary**: https://github.com/zzstoatzz/tangled-mcp (FastMCP Cloud)
10- **mirror**: tangled.sh:zzstoatzz.io/tangled-mcp (dogfooding)
11- `git push origin main` → both remotes
12
13## tools
14- all accept `owner/repo` or `@owner/repo` format (e.g., `zzstoatzz/tangled-mcp`)
15- server-side resolution:
16 1. handle → DID (via atproto identity resolution)
17 2. query `sh.tangled.repo` collection on owner's PDS
18 3. extract knot hostname and repo name from record
19 4. call knot's XRPC endpoint (e.g., `https://knot1.tangled.sh/xrpc/...`)
20
21## dev
22- justfile: `setup`, `test`, `check`, `push`
23- versioning: uv-dynamic-versioning (git tags)
24- type checking: ty + ruff (I, UP)
25- remember that `tree` is your friend, better than `ls` and a dream
26- **use `jq` for JSON parsing** (not python pipes)
27 - example: `curl -s https://pypi.org/pypi/tangled-mcp/json | jq -r '.info.version'`
28- **never use `sleep`** - poll/check with actual tools instead
29
30## architecture notes
31- repos stored as atproto records in collection `sh.tangled.repo` (NOT `sh.tangled.repo.repo`)
32- each repo record contains `knot` field indicating hosting server
33- appview (tangled.org) uses web routes, NOT XRPC
34- knots (e.g., knot1.tangled.sh) expose XRPC endpoints for git operations