Agent Standup
An MCP server enabling AI coding agents to interact with a task tracker that enforces rules server-side, replacing markdown files and hooks with a database, CLI, and web UI.
README
Agent Standup
A task tracker for AI coding agents. Replaces folders-of-markdown plus a 1,000-line PowerShell script with a real app: a database, a rules engine every change goes through, an MCP so agents can talk to it, a CLI for the parts MCP can't do, and a web front end.
The shift: today the rules live in hooks that ask agents to behave. Here they live in the backend and are enforced — the server refuses the change.
Docs
Everything is in docs/plans/:
| Doc | What it is |
|---|---|
| PLAN.md | The readable plan — how it works, in plain terms |
| SCHEMA.md | Tables, config, MCP tools, HTTP endpoints |
| DECISIONS.md | Every decision with its reasoning |
| MILESTONES.md | The work, broken into pull requests, in order |
Stack
Next.js (front end and API in one bundle) · Prisma · Postgres. The image is built in CI, pushed to GHCR, and pulled wherever it runs — never built on the deploy host, no bind mounts.
Local development
Requires Node 24 and Docker (for local Postgres).
cp .env.example .env # fill in DATABASE_URL etc.
npm install
npm run db:up # starts local Postgres on a non-default port
npx prisma migrate deploy # apply the committed migrations
npx prisma generate
npm run dev # http://localhost:3000
Useful scripts:
| Command | What it does |
|---|---|
npm run dev |
Next.js dev server |
npm run build / npm start |
Production build / run it |
npm run typecheck |
tsc --noEmit |
npm run lint / npm run format |
ESLint / Prettier (:check variants exist for CI) |
npm test |
Vitest |
npm run db:migrate |
Create/apply a dev migration (prisma migrate dev) |
npm run db:deploy |
Apply committed migrations without prompting (prisma migrate deploy) |
npm run db:check-drift |
Fail if schema.prisma and prisma/migrations disagree — needs SHADOW_DATABASE_URL pointed at an empty, disposable Postgres |
npm run db:studio |
Prisma Studio |
The initial baseline migration (the whole schema in one shot — see
SCHEMA.md) lives in prisma/migrations/. CI applies it to a
throwaway Postgres on every run and fails if schema.prisma and the migration history
have drifted apart.
Deployment
The image is built by .github/workflows/release.yml
on a version tag or manual dispatch, and pushed to ghcr.io/<owner>/agent-standup
tagged latest and the version. The package is public, so pulling it needs no
registry credential. Wherever it runs, pull and run it with
docker-compose.prod.yml:
GHCR_IMAGE=ghcr.io/<owner>/agent-standup:latest
DATABASE_URL=postgres://user:password@host:5432/agent_standup
docker compose --env-file .env.production -f docker-compose.prod.yml pull
docker compose --env-file .env.production -f docker-compose.prod.yml up -d
docker-compose.prod.yml has no build: block and no bind mounts by design — it
only ever pulls. It ships a health check on GET /api/health (liveness only —
deliberately doesn't touch the database, so a slow DB doesn't make the process
report unhealthy).
Postgres
This app needs its own Postgres reachable via DATABASE_URL. Prefer a
dedicated Postgres instance over adding a database to one that already
serves another app — it keeps credentials, backups, and version upgrades
independent, and the cost of one more small container is low. Only share an
existing instance if there's a specific reason to (e.g. a hosting limit on
how many database services are allowed).
If Postgres runs as its own container next to this one, order startup with
depends_on: condition: service_healthy — the entrypoint runs
prisma migrate deploy at boot, which opens a real database connection even
when there are zero pending migrations (expect and ignore
No migration found in prisma/migrations until the baseline migration
ships — see MILESTONES.md). Give Postgres's own health check a generous
start_period: a cold first boot (initdb plus the official image's own
internal restart) can take noticeably longer than a short window allows,
which can make depends_on give up right before Postgres would have come up
healthy on its own.
Deploying alongside other services
Some hosts run several unrelated apps under one shared Docker Compose
project rather than one compose file per app — a shared .env holding
per-service location/config variables, one compose file defining every
service, sub-folders per service holding data only. If that's the target,
fold this app's service block (and a Postgres block per the section above)
into the shared file instead of running docker-compose.prod.yml standalone
— the service definitions are the same either way, only which file they live
in changes. In that setup:
- Back up the shared compose file first, before editing it.
- Never run a bare
up,down, orrestartwith no service names in a directory that already has other services running from that file — always name the services you mean to affect explicitly, e.g.docker compose up -d agent-standup agent-standup-db. An unscoped command recreates (or stops) everything the file defines, not just what you're deploying. - Pick a host port that isn't already in use — check what the shared
compose file and the host's listening ports already claim before adding
APP_PORT. - Keep real secrets (the generated
DATABASE_URLpassword, etc.) only in that host's own.env— never copied into this repo.
Status
The boilerplate is in place: app skeleton, CI, Dockerfile, and compose files. The
database schema has its initial migration, but nothing queries it yet — the API
surface described in SCHEMA.md isn't built. See
MILESTONES.md for the build order.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。