@selfagency/beans-mcp
Official@selfagency/beans-mcp 🫘
Servidor MCP (Model Context Protocol) para el rastreador de incidencias Beans. Proporciona interfaces programáticas y de línea de comandos para interacciones basadas en IA con espacios de trabajo de Beans.
Documentación: beans-mcp.self.agency
🤖 ¡Prueba Beans totalmente integrado con GitHub Copilot en VS Code! Instala la extensión selfagency.beans-vscode.
Uso
npx @selfagency/beans-mcp /path/to/workspaceVersiones
@selfagency/beans-mcp tiene su propio versionado de paquetes. La compatibilidad con la CLI de Beans se rastrea por separado.
Al iniciar, el servidor compara la versión instalada de la CLI de beans con la versión compatible de Beans definida en el código: 0.4.2. Si difieren, imprime una advertencia en stderr y continúa el inicio.
Parámetros
--workspace-rooto argumento posicional: Ruta raíz del espacio de trabajo--cli-path: Ruta a la CLI de Beans--port: Puerto del servidor MCP (por defecto: 39173)--log-dir: Directorio de registros-h,--help: Imprime el uso y sale
Related MCP server: jira-cli-mcp
Resumen de herramientas MCP públicas
Herramienta | Descripción |
| Inicializa el espacio de trabajo ( |
| Archiva beans completados/descartados. |
| Obtiene los detalles completos de un bean por |
| Crea un nuevo bean (título/tipo + cuerpo/padre opcional). |
| Crea múltiples beans en una sola llamada, opcionalmente bajo un padre compartido. |
| Actualizaciones consolidadas de metadatos + cuerpo (estado/tipo/prioridad/padre/clearParent/bloqueando/bloqueadoPor/cuerpo/bodyAppend/bodyReplace) más sugerencia de concurrencia optimista opcional ( |
| Actualiza múltiples beans en una sola llamada, opcionalmente reasignándolos a un padre compartido. |
| Marca todas las tareas de lista de verificación markdown dentro de un bean como completadas. |
| Elimina uno o varios beans ( |
| Reabre un bean completado o descartado a un estado activo. |
| Operaciones unificadas de listar/buscar/filtrar/ordenar/listos, con paso directo de GraphQL. |
| Leer/editar/crear/eliminar archivos bajo |
| Leer registros de salida de extensiones o mostrar guía. |
La herramienta
beans_queryes intencionadamente amplia: prefierela para listar, buscar, filtrar u ordenar beans, y para generar instrucciones de Copilot (operation: 'llm_context').Todas las operaciones con archivos y registros validan las rutas para mantenerlas dentro del espacio de trabajo o del directorio de registros de VS Code. El prefijo
.beans/se elimina automáticamente de las rutas — puedes pasarsome-bean.mdo.beans/some-bean.mdy el resultado es el mismo.beans_updatereemplaza muchas herramientas de actualización específicas; los llamadores deben usarla para mantener la superficie de herramientas públicas pequeña y predecible.beans_archiveproporciona paridad con la CLI para archivar beans completados/descartados.Cerrar un bean padre mediante
beans_update(status: completedostatus: scrapped) propaga el mismo estado a todos los descendientes.Reabrir un bean padre mediante
beans_reopenpropaga el estado objetivo a los descendientes cerrados (completed/scrapped).beans_bulk_createybeans_bulk_updateson de mejor esfuerzo: procesan cada elemento secuencialmente y devuelven un array de resultados por elemento con entradas de éxito/error en lugar de fallar atómicamente.Los valores de
title:en el frontmatter se entrecomillan automáticamente al escribir. Pasa títulos sin procesar — el entrecomillado y escape se manejan por ti.beans_bean_fileadmiteupdate_frontmatterpara escrituras atómicas solo de frontmatter; los campos admitidos incluyenprybranch.Los resultados de listas sin filtro se almacenan en caché con un TTL de ráfaga corta y una estrategia de actualización por sondeo de marca de tiempo. Las herramientas de mutación (
beans_create,beans_update,beans_delete, etc.) invalidan la caché inmediatamente.Las discrepancias de versión entre
beans-mcpy la CLI de Beans son solo advertencias y no bloquean por diseño.Cuando falta
beanIden la entrada de la herramienta, los errores de validación incluyen una pista:¿Quisiste decir \beanId`?`.
Ejemplos
Solicitud:
{ "prefix": "project" }Respuesta (structuredContent):
{ "initialized": true }Solicitud:
{ "beanId": "bean-abc" }Solicitud (múltiples beans):
{ "beanIds": ["bean-abc", "bean-def"] }Respuesta (structuredContent):
{
"bean": {
"id": "bean-abc",
"title": "Fix login timeout",
"status": "todo",
"type": "bug",
"priority": "critical",
"body": "...markdown...",
"createdAt": "2025-12-01T12:00:00Z",
"updatedAt": "2025-12-02T08:00:00Z"
}
}Solicitud:
{}Respuesta (ejemplo):
{ "archived": true, "archivedCount": 3 }Solicitud:
{
"title": "Add dark mode",
"type": "feature",
"status": "todo",
"priority": "normal",
"body": "Implement theme toggle and styles",
"parent": "epic-123"
}
descriptionse acepta como un alias obsoleto debody.
Respuesta (structuredContent):
{
"bean": {
"id": "new-1",
"title": "Add dark mode",
"status": "todo",
"type": "feature"
}
}Solicitud:
{
"parent": "epic-123",
"beans": [
{ "title": "Design mockups", "type": "task" },
{ "title": "Implement API", "type": "task", "priority": "high" },
{ "title": "Write tests", "type": "task", "parent": "epic-456" }
]
}El parent de nivel superior se aplica como valor predeterminado a cualquier bean que no especifique su propio parent. Aquí Design mockups e Implement API se asignan a epic-123; Write tests lo reemplaza con epic-456.
Respuesta (structuredContent):
{
"requestedCount": 3,
"successCount": 3,
"failedCount": 0,
"results": [
{ "bean": { "id": "task-1", "title": "Design mockups" } },
{ "bean": { "id": "task-2", "title": "Implement API" } },
{ "bean": { "id": "task-3", "title": "Write tests" } }
]
}Solicitud (mover un lote de tareas a en progreso y asignarlas a un padre):
{
"parent": "epic-123",
"beans": [
{ "beanId": "task-1", "status": "in-progress" },
{ "beanId": "task-2", "status": "in-progress" },
{ "beanId": "task-3", "status": "in-progress", "parent": "epic-456" }
]
}Respuesta (structuredContent):
{
"requestedCount": 3,
"successCount": 3,
"failedCount": 0,
"results": [
{ "beanId": "task-1", "bean": { "id": "task-1", "status": "in-progress" } },
{ "beanId": "task-2", "bean": { "id": "task-2", "status": "in-progress" } },
{ "beanId": "task-3", "bean": { "id": "task-3", "status": "in-progress" } }
]
}Ambas herramientas masivas son de mejor esfuerzo: los fallos parciales se informan por elemento en lugar de abortar todo el lote.
Solicitud (cambiar estado y añadir bloqueo):
{
"beanId": "bean-abc",
"status": "in-progress",
"blocking": ["bean-def"],
"ifMatch": "etag-value"
}Solicitud (modificaciones atómicas del cuerpo):
{
"beanId": "bean-abc",
"bodyReplace": [
{ "old": "- [ ] Task 1", "new": "- [x] Task 1" },
{ "old": "- [ ] Task 2", "new": "- [x] Task 2" }
],
"bodyAppend": "## Summary\n\nAll checklist items completed."
}Nota:
body(reemplazo completo) no se puede combinar conbodyAppendobodyReplaceen la misma solicitud.
Respuesta (structuredContent):
{
"bean": {
"id": "bean-abc",
"status": "in-progress",
"blockingIds": ["bean-def"]
}
}Solicitud:
{ "beanId": "bean-old", "force": false }Respuesta:
{ "deleted": true, "beanId": "bean-old" }Solicitud por lotes:
{ "beanIds": ["bean-old", "bean-older"], "force": false }Respuesta por lotes (resumen):
{
"requestedCount": 2,
"deletedCount": 2,
"failedCount": 0,
"results": [
{ "beanId": "bean-old", "deleted": true },
{ "beanId": "bean-older", "deleted": true }
]
}Solicitud:
{
"beanId": "bean-closed",
"requiredCurrentStatus": "completed",
"targetStatus": "todo"
}Respuesta:
{ "bean": { "id": "bean-closed", "status": "todo" } }Solicitud:
{ "beanId": "bean-abc" }Respuesta:
{
"bean": {
"id": "bean-abc",
"status": "todo"
},
"totalTaskCount": 5,
"updatedTaskCount": 3,
"unchangedTaskCount": 2
}Actualizar (listar todos los beans):
{ "operation": "refresh" }Respuesta (parcial):
{ "count": 12, "beans": [] }Filtrar (estados/tipos/etiquetas):
{
"operation": "filter",
"statuses": ["in-progress", "todo"],
"types": ["bug", "feature"],
"tags": ["auth"]
}Buscar (texto completo):
{ "operation": "search", "search": "authentication", "includeClosed": false }Ordenar (modos: status-priority-type-title, updated, created, id):
{ "operation": "sort", "mode": "updated" }Listos (solo beans accionables):
{ "operation": "ready" }Contexto LLM (generar instrucciones de Copilot; escritura opcional al espacio de trabajo):
{ "operation": "llm_context", "writeToWorkspaceInstructions": true }Respuesta (structuredContent):
{
"graphqlSchema": "...",
"generatedInstructions": "...",
"instructionsPath": "/workspace/.github/instructions/beans-prime.instructions.md"
}Paso directo de GraphQL sin procesar (paridad con CLI mediante beans query):
{
"operation": "graphql",
"graphql": "{ beans(filter: { type: [\"bug\"] }) { id title status } }"
}Con variables:
{
"operation": "graphql",
"graphql": "query($q: String!) { beans(filter: { search: $q }) { id title } }",
"variables": { "q": "authentication" }
}Solicitud (lectura):
{ "operation": "read", "path": "beans-vscode-123--title.md" }Respuesta:
{
"path": "/workspace/.beans/beans-vscode-123--title.md",
"content": "---\n...frontmatter...\n---\n# Title\n"
}Solicitud (actualización atómica de frontmatter):
{
"operation": "update_frontmatter",
"path": "beans-vscode-123--title.md",
"fields": {
"status": "in-progress",
"pr": "123",
"branch": "feature/cascade-status-and-skills-npm"
}
}Respuesta:
{
"path": "/workspace/.beans/beans-vscode-123--title.md",
"bytes": 256,
"updatedFields": ["status", "pr", "branch"],
"frontmatter": {
"status": "in-progress",
"pr": "123",
"branch": "feature/cascade-status-and-skills-npm"
}
}Solicitud (leer las últimas 200 líneas):
{ "operation": "read", "lines": 200 }Respuesta:
{
"path": "/workspace/.vscode/logs/beans-output.log",
"content": "...log lines...",
"linesReturned": 200
}Uso programático
Instalación
npm install beans-mcpEjemplo
import { createBeansMcpServer, parseCliArgs } from '@selfagency/beans-mcp';
const server = await createBeansMcpServer({
workspaceRoot: '/path/to/workspace',
cliPath: 'beans', // or path to beans CLI
});
// Connect to stdio transport or your own transportAPI
createBeansMcpServer(opts)
Crea e inicializa una instancia del servidor Beans MCP.
Opciones:
workspaceRoot(string): Ruta al espacio de trabajo de BeanscliPath(string, opcional): Ruta al ejecutable de la CLI de Beans (por defecto: 'beans')name(string, opcional): Nombre del servidor (por defecto: 'beans-mcp-server')version(string, opcional): Versión del servidorlogDir(string, opcional): Directorio para los registros del servidorbackend(BackendInterface, opcional): Implementación personalizada del backend
Devuelve: { server: McpServer; backend: BackendInterface }
startBeansMcpServer(argv)
Punto de entrada compatible con CLI para iniciar el servidor.
Funciones de utilidad
parseCliArgs(argv: string[]): Analiza argumentos de CLIisPathWithinRoot(root: string, target: string): boolean: Comprueba si una ruta está contenida dentro de la raízsortBeans(beans, mode): Ordena beans según el modo especificado
Tipos y esquemas
Exportación del esquema GraphQL, esquemas de validación Zod y tipos TypeScript para registros y operaciones de Beans.
Habilidades de agente (skills-npm, skills.sh)
Este paquete incluye una habilidad de agente incorporada en skills/ y también publica esa habilidad en un formato que encaja en el ecosistema más amplio de habilidades abiertas expuesto por skills.sh.
Ruta de la habilidad en el paquete:
skills/beans-mcp/SKILL.mdArtefacto de habilidad publicado:
https://beans-mcp.self.agency/.well-known/agent-skills/beans-mcp/SKILL.mdÍndice de descubrimiento publicado:
https://beans-mcp.self.agency/.well-known/agent-skills/index.jsonCompatible con herramientas de descubrimiento que escanean:
node_modules/**/skills/*/SKILL.md
Esto significa que puedes usarlo con flujos de trabajo basados en npm como skills-npm, mientras también apuntas las herramientas del ecosistema al artefacto de habilidad publicado y al índice de descubrimiento utilizados por catálogos de habilidades como skills.sh.
Para enlazar simbólicamente las habilidades empaquetadas de npm instaladas en tu espacio de trabajo de agente, puedes usar skills-npm en tu proyecto consumidor.
Licencia
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceA MCP server for interacting with FogBugz issue tracker through LLMs such as Claude. Supports both the XML API (/api.asp) and the JSON API (/f/api/0/jsonapi) with automatic version detection at startup. Works with on-premise and on-demand FogBugz installations.19242MIT
- Alicense-qualityCmaintenanceMCP server that wraps the jira-cli command-line tool to enable AI assistants to interact with Jira.169MIT
- Flicense-qualityDmaintenanceMCP server for integrating Linear with Claude Code and other MCP clients. Enables issue management, project planning, and status tracking through a set of tools.
- Alicense-qualityAmaintenanceA local, provider-neutral MCP server for repository-scoped issue handling. It provides a guarded interface to Linear, GitHub Issues, GitHub Projects v2, and Jira Cloud, with preview/apply safety and host-local configuration.731MIT
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/selfagency/beans-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server