- TypeScript 77.1%
- Python 6.6%
- Just 6.4%
- Shell 5.7%
- Dockerfile 2.8%
- Other 1.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Forgejo auto-requested Kai's review on every agent pull request because this repo carried `* @coilysiren`. Branch protection runs `required_approvals: 0`, so that request never blocked a merge, it only ever looked like one. A standing review request from the repo owner contradicts the landing lane in the one place an agent checks before deciding whether it may act. Fleet sweep tracked at coilyco-bridge/agentic-os-kai#889. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
| .agents/skills/repo-bluesky-mcp | ||
| .forgejo/workflows | ||
| .github | ||
| .ward | ||
| docs | ||
| scripts | ||
| src | ||
| test | ||
| .dockerignore | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| Dockerfile | ||
| eslint.config.js | ||
| justfile | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| pyproject.toml | ||
| README.md | ||
| tsconfig.json | ||
bluesky-mcp
bluesky-mcp is Kai's authenticated, strictly read-only Bluesky MCP. It uses
the official AT Protocol SDK to create and refresh an internal app-password
session, and the official MCP SDK streamable-HTTP transport to serve a small,
reviewed tool surface.
Transport and configuration
The process serves GET /healthz and MCP streamable HTTP at POST /mcp.
Defaults are HOST=0.0.0.0 and PORT=9113. Set these runtime variables:
BSKY_APP_PASSWORD(required): app password supplied only at runtime.BSKY_HANDLE(optional): authenticated account handle; defaults tocoilysiren.me.MCP_ALLOWED_HOSTS(optional): comma-separated hosts accepted by the MCP transport's DNS-rebinding defense. It defaults to local development hosts.
Run locally with an app password supplied out of band:
just install
BSKY_APP_PASSWORD=... just run
Exact tool inventory
get_profilesearch_profilessearch_postsget_author_feedget_postsget_post_threadlist_followerslist_followsget_home_timelinelist_notificationsget_kai_liked_posts
All page sizes are bounded to 50 or below. Post batches are capped at 25 and thread depth plus parent height at 6.
Threat model
The configured app password can authorize account writes, so the adapter must never expose that authority. It has no post, reply, follow, like, repost, delete, mute, block, report, moderation, chat, account mutation, login, generic URL, arbitrary XRPC, or raw HTTP tool. Inputs accept only bounded, validated actors, post AT URIs, cursors, queries, and limits. The app password and session tokens remain in process memory and credential-shaped result fields are stripped before an MCP response is created. SDK failures are deliberately logged without their values.
The source image runs as the non-root node user. Deployment access control,
secret injection, and network exposure are intentionally outside this source
repository.
Development
just lint, just typecheck, just test, ward audit, and just precommit
are the supported validation verbs. A main-branch workflow tests and publishes
the private image
forgejo.coilysiren.me/coilyco-flight-deck/bluesky-mcp:<full-source-sha>.
Deployment uses a separate read-only forgejo-registry pull credential.
See also
- AGENTS.md - agent operating rules for this repository.
- docs/FEATURES.md - inventory of what ships today.
- justfile - dev verbs.
- .ward/ward.yaml - catalog metadata only.