agent-task-mcp-server
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Warn
- network request — Outbound network request in app/composables/useBoards.ts
- network request — Outbound network request in app/composables/useTasks.ts
- process.env — Environment variable access in drizzle.config.ts
Permissions Pass
- Permissions — No dangerous permissions requested
This tool provides a kanban-style task management dashboard combined with an MCP server. It allows human users to manage tasks via a web UI while enabling AI agents to interact with the board programmatically.
Security Assessment
The overall risk is rated as Low. The server does not request dangerous permissions and does not appear to execute arbitrary shell commands. However, it does make outbound network requests in its board and task composables to sync data, and it accesses environment variables for database configuration and session secrets. These are standard, expected behaviors for a web application. There are no signs of hardcoded secrets or malicious data exfiltration, though administrators must ensure they securely configure their own `NUXT_SESSION_PASSWORD` and database credentials.
Quality Assessment
The project is actively maintained, with its most recent push occurring today. It uses a standard, permissive MIT license and includes a clear description of its features. The main drawback is its low community visibility; with only 5 GitHub stars, the tool has not been widely peer-reviewed or battle-tested by a large user base.
Verdict
Use with caution — the code appears safe and follows standard practices, but its low community adoption means it lacks extensive external validation.
A simple multiuser multiboard task MCP server managed via kanban board interface.
Moo Tasks
A kanban-style task management dashboard with an integrated MCP server.
Human users manage tasks via a drag-and-drop web UI, while AI agents connect via the MCP server to discover, accept, update, and create tasks programmatically.
✨ Features
| Feature | Description | |
|---|---|---|
| 👤 | User Accounts | Email/password registration and login with sealed cookie sessions |
| 📋 | Multiple Boards | Create and manage multiple project boards with custom descriptions |
| 👥 | Board Collaboration | Invite users by email, manage member roles (Owner/Member) |
| 🔄 | 5-Column Kanban | Workflow stages: Backlog → To Do → In Progress → Review → Done |
| 🔀 | Dual View Modes | Toggle between visual Kanban Board and condensed Task List |
| 🖱️ | Drag & Drop | Intuitive task movement between columns using vuedraggable |
| 🔧 | Correction Tasks | Request specific fixes with linked child tasks for task refinement |
| 🤖 | MCP Server | Per-board MCP endpoints with bearer token auth & Public/Private toggles |
| 📝 | Configurable Instructions | Global and per-board MCP instructions with "Reset to Default" support |
| 🔗 | Task Deep-Linking | Copy unique task URLs for direct navigation and easy sharing |
| ⚡ | Real-time Polling | Automatic board sync to keep human and AI agent actions in sync |
| 🗄️ | MySQL Persistence | Reliable data storage with Drizzle ORM |
🚀 Quick Start
Prerequisites
- Node.js 22+
- npm
Install & Run
# Install dependencies
npm install
# Set session secret (required)
export NUXT_SESSION_PASSWORD="your-secret-key-at-least-32-characters-long"
# Start development server
npm run dev
### Docker Setup
If you have Docker installed, you can start the entire stack (including the database, Adminer, and Mailpit) with:
```bash
docker-compose up -d
The application will be available at http://localhost:3000.
The app runs at http://localhost:3000:
- Register an account at
/register - Create a board from the dashboard
- Add tasks and manage your kanban board
- Connect AI agents to the board's MCP endpoint
Seed sample data (optional):
npx tsx server/db/seed.ts
⚙️ Environment Variables
Copy .env.example to .env and adjust as needed:
| Variable | Default | Description |
|---|---|---|
HOST |
0.0.0.0 |
Server bind address |
PORT |
3000 |
Server port |
DB_USER |
mootasks |
MySQL user |
DB_PASSWORD |
mootasks |
MySQL password |
DB_NAME |
mootasks |
MySQL database name |
DB_LOCAL_PORT |
3307 |
MySQL local port mapping |
DATABASE_URL |
(required if not using Docker) | MySQL connection string |
NUXT_SESSION_PASSWORD |
(required) | 32+ char secret for sealed cookie sessions |
🤖 MCP Server
Each board has its own MCP endpoint at /api/boards/:boardId/mcp. AI agents connect to a specific board to work on its tasks.
📋 Working with Tasks via MCP
The board acts as the primary task list for this application. To programmatically work on tasks:
- Get the MCP Token: In the Board Settings, generate an MCP token if the board is private.
- Configure Your Agent: Add the MCP server configuration for your specific board.
- Use Tools: Use the available tools (
list-tasks,accept-task,update-task-status, etc.) to interact with the tasks.
🔐 Security & Privacy
| Mode | Description |
|---|---|
| 🔒 Private (Default) | Requires a Bearer Token via the token query parameter |
| 🌐 Public | Allows access without a token (for local development) |
Tokens can be generated, rotated, or revoked at any time from Board Settings.
🛠️ Tools
| Tool | Description |
|---|---|
list-tasks |
List tasks with optional status/priority filters |
get-task |
Get full details of a task by ID |
create-task |
Create a new task |
update-task-status |
Update a task's status |
accept-task |
Assign yourself to a task and move it to in_progress |
📚 Resources
| URI | Description |
|---|---|
moo-tasks://<boardId>/board-state |
Full board snapshot grouped by status |
moo-tasks://<boardId>/agent-instructions |
Workflow instructions for agents |
💬 Prompts
| Prompt | Description |
|---|---|
task-workflow |
Guided workflow for discovering and completing tasks |
🔄 Task Hierarchy & Corrections
Moo Tasks supports a refined workflow for task completion:
- Review Status — Move tasks to "Review" when ready for human verification
- Request Corrections — From "Review" or "Done", create linked "Correction Tasks"
- Linked Navigation — Correction tasks link to their parent for easy navigation
Configurable Instructions
| Level | Description |
|---|---|
| 🌍 Global | Edit at /settings/instructions, applies to all boards by default |
| 📋 Per-Board | Override in board settings, falls back to global when reset |
Both support reset to default to restore the original built-in instructions.
🔌 MCP Client Configuration
Claude Code{
"mcpServers": {
"moo-tasks": {
"type": "streamable-http",
"url": "http://localhost:3000/api/boards/<boardId>/mcp?token=<your-bearer-token>"
}
}
}
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"moo-tasks": {
"type": "streamable-http",
"url": "http://localhost:3000/api/boards/<boardId>/mcp?token=<your-bearer-token>"
}
}
}
VS Code
Add to settings or .vscode/mcp.json:
{
"mcpServers": {
"moo-tasks": {
"type": "streamable-http",
"url": "http://localhost:3000/api/boards/<boardId>/mcp?token=<your-bearer-token>"
}
}
}
📡 API Routes
Authentication| Method | Route | Purpose |
|---|---|---|
| POST | /api/auth/register |
Register with email/password |
| POST | /api/auth/login |
Login with email/password |
| Method | Route | Purpose |
|---|---|---|
| GET | /api/boards |
List boards for current user |
| POST | /api/boards |
Create a new board |
| GET | /api/boards/:id |
Get board details |
| PATCH | /api/boards/:id |
Update board (owner only) |
| DELETE | /api/boards/:id |
Delete board (owner only) |
| Method | Route | Purpose |
|---|---|---|
| GET | /api/boards/:id/members |
List board members |
| POST | /api/boards/:id/members |
Invite user by email |
| DELETE | /api/boards/:id/members/:userId |
Remove member |
| Method | Route | Purpose |
|---|---|---|
| GET | /api/boards/:id/tasks |
List tasks for a board |
| POST | /api/boards/:id/tasks |
Create a task in a board |
| GET | /api/tasks/:id |
Get a single task |
| PATCH | /api/tasks/:id |
Update task fields |
| DELETE | /api/tasks/:id |
Delete a task |
| Method | Route | Purpose |
|---|---|---|
| GET | /api/instructions |
Get global instructions |
| PUT | /api/instructions/:id |
Update global instruction |
| POST | /api/instructions/:id/reset |
Reset to default |
| GET | /api/boards/:id/instructions |
Get board instructions |
| PUT | /api/boards/:id/instructions/:instructionId |
Update board instruction |
| POST | /api/boards/:id/instructions/:instructionId/reset |
Reset board instruction |
🐳 Docker
Build & Run
# Build
docker build -t moo-tasks .
# Run
docker run -p 3000:3000 \
-e NUXT_SESSION_PASSWORD="your-secret" \
-e DATABASE_URL="mysql://user:pass@host:3306/db" \
moo-tasks
☁️ Deploy to DigitalOcean App Platform
Prerequisites- A DigitalOcean account
- Your repo pushed to GitHub
- A DigitalOcean API token
- Fork/push this repo to GitHub
- Go to DigitalOcean App Platform → Create App
- Connect your GitHub repo and select the
mainbranch - DigitalOcean will auto-detect the
Dockerfile— confirm the settings - Under Environment Variables, add these secrets:
NUXT_SESSION_PASSWORD— 32+ character secret for session encryptionDATABASE_URL— Your MySQL connection string
- Deploy!
Option 2: Deploy with doctlNote: MySQL is recommended for production as it allows you to increase
instance_countto handle more traffic.
# Install doctl and authenticate
doctl auth init
# Create the app from the spec (update repo in .do/app.yaml first)
doctl apps create --spec .do/app.yaml
# Set secrets
doctl apps update <app-id> --spec .do/app.yaml
Option 3: CI/CD with GitHub Actions
The included workflow at .github/workflows/deploy.yml automatically:
- On pull requests — builds and validates the project
- On push to main — builds, then deploys to DigitalOcean App Platform
Setup:
- Create the app on DigitalOcean first (Option 1 or 2)
- Generate a DigitalOcean API token
- Add it as a GitHub repository secret:
- Go to Settings → Secrets and variables → Actions
- Add
DIGITALOCEAN_ACCESS_TOKENwith your DO API token
- Push to
main— the workflow will deploy automatically
The .do/app.yaml file defines the full app configuration:
name: moo-tasks
services:
- name: web
dockerfile_path: Dockerfile
github:
branch: main
deploy_on_push: true
http_port: 3000
instance_count: 1
instance_size_slug: apps-s-1vcpu-1gb
envs:
- key: NUXT_SESSION_PASSWORD
type: SECRET
- key: DATABASE_URL
type: SECRET
Troubleshooting
- "Only board owners can invite users" or missing boards after creation: Ensure
DATABASE_URLis correctly configured and the MySQL server is accessible from the app. - Scalability: Unlike SQLite, you can increase
instance_countto handle more traffic, as all instances share the same MySQL database. - Session Reset: If the database is reset but your browser still has a session cookie, the app will automatically log you out. Simply register again to start fresh.
🧱 Tech Stack
| Technology | Purpose |
|---|---|
| Nuxt 4 (Nitro + Vue 3) | Framework |
| Tailwind CSS v4 | Styling |
| MySQL + Drizzle ORM | Database |
| nuxt-auth-utils | Auth (sealed cookie sessions, scrypt hashing) |
| @nuxtjs/mcp-toolkit | MCP server integration |
| vuedraggable | Drag & drop |
| nanoid | ID generation |
Built with 🐄 by the Moo Tasks team
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found