···11+# tangled MCP server configuration
22+33+# your AT Protocol handle (e.g., user.bsky.social or zzstoatzz.io)
44+TANGLED_HANDLE=your.handle.here
55+66+# your app password (create at https://bsky.app/settings/app-passwords)
77+TANGLED_PASSWORD=your-app-password-here
88+99+# (optional) your PDS URL if auto-discovery doesn't work
1010+# leave commented out to auto-discover from your handle
1111+# TANGLED_PDS_URL=https://your-pds.example.com
···11+# tangled-mcp project notes
22+33+## dependencies
44+- `uv add` only - NEVER `uv pip`
55+- atproto from PR #605 (service auth support)
66+77+## architecture
88+- auth: PDS login → `getServiceAuth` → tangled XRPC
99+- `TANGLED_APPVIEW_URL` + `TANGLED_DID` are constants (not user-configurable)
1010+- `TANGLED_PDS_URL` optional (auto-discovery from handle unless custom PDS)
1111+1212+## code quality
1313+- ruff: import sorting (I), pyupgrade (UP)
1414+- ty: type checking configured
1515+- pre-commit: ruff only
1616+- justfile: setup, test, check
1717+1818+## testing
1919+- use in-memory transport (pass FastMCP directly to Client)
2020+- pytest asyncio_mode = "auto" (never add `@pytest.mark.asyncio`)
2121+2222+## anti-patterns
2323+- don't expose service URLs as user settings
2424+- don't use deferred imports (unless absolutely necessary)
+51
README.md
···11+# tangled-mcp
22+33+MCP server for [Tangled](https://tangled.org) - a git collaboration platform built on AT Protocol.
44+55+## installation
66+77+```bash
88+git clone https://tangled.org/zzstoatzz/tangled-mcp
99+cd tangled-mcp
1010+just setup
1111+```
1212+1313+> [!IMPORTANT]
1414+> requires [`uv`](https://docs.astral.sh/uv/) and [`just`](https://github.com/casey/just)
1515+1616+## configuration
1717+1818+create `.env` file:
1919+2020+```bash
2121+TANGLED_HANDLE=your.handle
2222+TANGLED_PASSWORD=your-app-password
2323+# optional: only needed if using custom PDS (leave blank for auto-discovery)
2424+TANGLED_PDS_URL=
2525+```
2626+2727+## usage
2828+2929+```bash
3030+uv run tangled-mcp
3131+```
3232+3333+## resources
3434+3535+- `tangled://status` - connection status (PDS auth + tangled accessibility)
3636+3737+## tools
3838+3939+### repositories
4040+- `list_repo_branches(repo, limit, cursor)` - list branches for a repository
4141+4242+### issues
4343+- `create_repo_issue(repo, title, body)` - create an issue on a repository
4444+- `list_repo_issues(repo, limit, cursor)` - list issues for a repository
4545+4646+## development
4747+4848+```bash
4949+just test # run tests
5050+just check # run pre-commit checks
5151+```
+12
justfile
···11+# setup project - sync dependencies and install pre-commit hooks
22+setup:
33+ uv sync
44+ uv run pre-commit install
55+66+# run tests
77+test:
88+ uv run pytest tests/ -v
99+1010+# run pre-commit checks
1111+check:
1212+ uv run pre-commit run --all-files