Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
Descripción del creador (original en inglés)
Server-enforced workflow discipline for AI agents: work items, dependency graphs, quality gates
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
DATABASE_PATH, USE_FLYWAY, AGENT_CONFIG_DIR, MCP_TRANSPORT, MCP_HTTP_PORT, LOG_LEVEL, LOG_FILENecesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"task-orchestrator": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_PATH",
"-e",
"USE_FLYWAY",
"-e",
"AGENT_CONFIG_DIR",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_HTTP_PORT",
"-e",
"LOG_LEVEL",
"-e",
"LOG_FILE",
"ghcr.io/jpicklyk/task-orchestrator:3.16.0"
],
"env": {
"DATABASE_PATH": "your-value",
"USE_FLYWAY": "your-value",
"AGENT_CONFIG_DIR": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_HTTP_PORT": "your-value",
"LOG_LEVEL": "your-value",
"LOG_FILE": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add task-orchestrator --env DATABASE_PATH=your-value --env USE_FLYWAY=your-value --env AGENT_CONFIG_DIR=your-value --env MCP_TRANSPORT=your-value --env MCP_HTTP_PORT=your-value --env LOG_LEVEL=your-value --env LOG_FILE=your-value -- docker run -i --rm -e DATABASE_PATH -e USE_FLYWAY -e AGENT_CONFIG_DIR -e MCP_TRANSPORT -e MCP_HTTP_PORT -e LOG_LEVEL -e LOG_FILE ghcr.io/jpicklyk/task-orchestrator:3.16.0Completa los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"task-orchestrator": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_PATH",
"-e",
"USE_FLYWAY",
"-e",
"AGENT_CONFIG_DIR",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_HTTP_PORT",
"-e",
"LOG_LEVEL",
"-e",
"LOG_FILE",
"ghcr.io/jpicklyk/task-orchestrator:3.16.0"
],
"env": {
"DATABASE_PATH": "your-value",
"USE_FLYWAY": "your-value",
"AGENT_CONFIG_DIR": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_HTTP_PORT": "your-value",
"LOG_LEVEL": "your-value",
"LOG_FILE": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"task-orchestrator": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATABASE_PATH",
"-e",
"USE_FLYWAY",
"-e",
"AGENT_CONFIG_DIR",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_HTTP_PORT",
"-e",
"LOG_LEVEL",
"-e",
"LOG_FILE",
"ghcr.io/jpicklyk/task-orchestrator:3.16.0"
],
"env": {
"DATABASE_PATH": "your-value",
"USE_FLYWAY": "your-value",
"AGENT_CONFIG_DIR": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_HTTP_PORT": "your-value",
"LOG_LEVEL": "your-value",
"LOG_FILE": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
DATABASE_PATH envUSE_FLYWAY envAGENT_CONFIG_DIR envMCP_TRANSPORT envMCP_HTTP_PORT envLOG_LEVEL envLOG_FILE envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 6 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub jpicklyk, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (3.16.0) llegó al registro hace 35 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Docker en tu computadora.
En la misma categoría: Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
Agent-Native Google Calendar - manage events, sync, and public booking
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Server-enforced workflow discipline for AI agents.
Prompt-based frameworks hope the LLM follows instructions. This one blocks the call if it doesn't.
Task Orchestrator is an MCP server that gives AI coding agents a persistent work item graph with quality gates enforced by the server, not the prompt. It is built for developers running multi-agent or multi-session coding workflows: an orchestrator dispatching sub-agents, a fresh session picking up yesterday's work, or an autonomous loop draining a backlog. It ships as a Docker image, works with any MCP client, and has an optional Claude Code plugin that adds skills and hooks on top.
New here? Start with the [illustrated field guide](https://jpicklyk.github.io/task-orchestrator/field-guide/). It explains the ideas on this page in short visual pages, several of them interactive: fire triggers at a phase gate, click a work breakdown through its dependencies, and watch a schema resolve.
Multi-agent workflows need infrastructure the model doesn't provide. When an orchestrator dispatches sub-agents across sessions, there's no built-in way to enforce what documentation must exist before work starts, track which agent made which change, or guarantee dependency ordering across a work breakdown. These are structural concerns — they belong in the server, not in prompts.
Task Orchestrator puts them in the server. If a required design note isn't filled, advance returns an error naming the missing note. If an upstream dependency isn't complete, the transition is blocked. Every transition and note records who made it. A new session recovers the full state in one call instead of replaying a conversation. And the rules are YAML config, not hardcoded prompts - change them without changing code.
Morning — new session, new agent, zero context:
Agent: items_read(select="context") → 2 items in work, 1 blocked, 1 stalled (missing implementation-notes) Agent: items_read(select="history", since="2026-01-14T17:00:00Z") → Recent transitions show orchestrator-1 dispatched 3 sub-agents yesterday
Agent: advance(ops=[{ op: "transition", itemId: "a3f28c01", trigger: "start" }]) -> gate_blocked: "Item a3f28c01-... is missing 1 required notes." (detail.missing: requirements)
Agent: notes_write(ops=[{ op: "upsert", itemId: "a3f28c01", key: "requirements", role: "queue", body: "Validate email format, enforce password complexity..." }]) -> results[0]: { ok: true, id: "...", version: 1, created: true }
Agent: advance(ops=[{ op: "transition", itemId: "a3f28c01", trigger: "start" }]) → queue → work. Caller recorded. No context rebuilding.
Prerequisite: Docker installed and running.
The simplest setup is a per-session STDIO container: no port, no daemon, no REST API. Add it to your project's .mcp.json:
{
"mcpServers": { "mcp-task-orchestrator": { "command": "docker", "args": [ "run", "--rm", "-i", "-v", "mcp-task-data:/app/data", "ghcr.io/jpicklyk/task-orchestrator:latest" ] } } }
Claude Code users can register the same shape from the CLI instead:
claude mcp add-json mcp-task-orchestrator '{
"command": "docker", "args": ["run", "--rm", "-i", "-v", "mcp-task-data:/app/data", "ghcr.io/jpicklyk/task-orchestrator:latest"] }'
Restart your client. The server creates its SQLite database on first run. Without a config file every tool works in schema-free mode: no gates, no required notes. Add schemas when you want enforcement.
Create .taskorchestrator/config.yaml in your project (see Workflow Enforcement for an example, or use the plugin's /task-orchestrator:manage-schemas skill) and mount that folder into the container:
{
"mcpServers": { "mcp-task-orchestrator": { "command": "docker", "args": [ "run", "--rm", "-i", "-v", "mcp-task-data:/app/data", "-v", "/absolute/path/to/your/project/.taskorchestrator:/project/.taskorchestrator:ro", "-e", "AGENT_CONFIG_DIR=/project", "ghcr.io/jpicklyk/task-orchestrator:latest" ] } } }
At every start the server imports the mounted file into its database (the server-config-import boot step) and then serves the stored copy; editing the file takes effect on the next restart. If several containers share one data volume but mount different files, the last one to boot wins; use step 3 for multi-project setups.
Use an absolute host path. Claude Code's .mcp.json expands only environment variables (${VAR} and ${VAR:-default}), so editor-style placeholders such as ${workspaceFolder} are not substituted. Only the .taskorchestrator/ folder is exposed; the server has no access to the rest of your project.
If you work across several repositories, run one persistent server with the REST API enabled. Each project's .taskorchestrator/config.yaml then syncs into it automatically through the plugin's config-sync hook: no per-project container, no manual mount, and config changes hot-reload without a restart. The plugin's /task-orchestrator:configure-server skill renders this setup interactively; the manual equivalent is:
docker pull ghcr.io/jpicklyk/task-orchestrator:latest
docker run -d --name mcp-task-orchestrator-http --restart unless-stopped \ -v mcp-task-data:/app/data \ -e MCP_TRANSPORT=http -e API_ENABLED=true -e API_AUTH_MODE=none -e API_ALLOW_UNAUTHENTICATED=true \ -p 127.0.0.1:3001:3001 \ ghcr.io/jpicklyk/task-orchestrator:latest
Register it in .mcp.json using the HTTP shape:
{
"mcpServers": { "mcp-task-orchestrator": { "type": "http", "url": "http://localhost:3001/mcp" } } }
And export the client-side variable that tells config-sync where the server is (without it, config-sync silently does nothing):
export TASK_ORCHESTRATOR_API_URL=http://localhost:3001
Alternatively, a client.json (apiUrl only, no token) supplies the URL. Project-mode /task-orchestrator:init writes it beside the project config, only for a loopback server and only as a bare origin with no path, query or fragment (add .taskorchestrator/client.json to .gitignore, the URL is machine-specific); /task-orchestrator:init --user writes the user-level file, which works for any host. The order is the environment variable, then the project-level file, then the user-level file. /task-orchestrator:init sets up a project root for the current directory, and /task-orchestrator:init --user creates a personal root that serves every directory without its own config.
SECURITY: unauthenticated mode (REST and
/mcpalike) means anyone who can reach the port has full
read/write/delete access, as the single
localprincipal. This is only safe because the port is published loopback-only (-p 127.0.0.1:3001:3001).
Never publish it on
0.0.0.0or a wider interface. For shared or networked deployments use bearer
tokens or JWKS auth — see Fleet Deployment.
Prefer to run without Docker? CONTRIBUTING.md covers building the fat JAR from source.
Every work item has a role: queue (not started), work (in progress), review (optional, opt-in per schema), blocked (an upstream dependency is unmet), and terminal (done or cancelled). Each role maps to one or more configurable statuses. Agents move items with the advance tool's transition op rather than editing status directly, and that call is where every gate is checked. Schemas attach note requirements to roles: a note declared with role: queue must exist before the item can leave the queue phase.
Illustrated: Phase Gates draws the roles and triggers as a track and includes a gate simulator.
Schemas define what agents must produce at each phase, and the server blocks progression until it's done. They also set a planning floor: when an agent enters plan mode, the schema tells it what documentation must exist before implementation can start, shaping the plan itself.
# .taskorchestrator/config.yaml
work_item_schemas: feature-task: notes:
With this schema, advance transition with trigger: "start" from queue requires requirements to be filled. The server returns a gate_blocked error listing exactly which notes are missing.
The guidance field provides authoring instructions surfaced at the right moment: when an agent is about to fill that note, the response names it as guidanceKey (with the skillPointer when the note names a skill), and items_read schema returns the text. The skill field goes further, naming a skill the agent should invoke before filling the note so the evaluation follows a defined framework rather than freeform prose.
Traits add cross-cutting note requirements to any schema without duplicating definitions. Define a trait once, apply it to any item type:
traits:
needs-security-review: notes:
work_item_schemas: feature-task: default_traits:
Every feature-task item automatically inherits the security-assessment requirement. Traits can also be applied per item via the traits array of an items_write create or update, so a task touching authentication gets needs-security-review while a CSS cleanup doesn't.
Illustrated: Schemas and Traits shows how a type, its default traits and per-item traits resolve into one gate. Seats covers splitting a phase between several agents.
Everything is a WorkItem in a hierarchical graph. Items nest to any depth and are connected by typed dependency edges. Create an entire work breakdown atomically:
{ "ops": [{
"op": "create_tree", "root": { "title": "User Authentication", "type": "feature-task" }, "children": [ { "ref": "schema", "title": "Database schema", "type": "feature-task" }, { "ref": "api", "title": "Login API", "type": "feature-task" }, { "ref": "tests", "title": "Integration tests", "type": "feature-task" } ], "deps": [ { "from": "schema", "
Solo se muestra el principio; lee el resto en el repo