@selfagency/beans-mcp
Official@selfagency/beans-mcp 🫘
MCP (Model Context Protocol) Server für den Beans Issue-Tracker. Bietet programmatische und CLI-Schnittstellen für KI-gestützte Interaktionen mit Beans-Workspaces.
Dokumentation: beans-mcp.self.agency
🤖 Testen Sie Beans vollständig integriert mit GitHub Copilot in VS Code! Installieren Sie die selfagency.beans-vscode Erweiterung.
Verwendung
npx @selfagency/beans-mcp /path/to/workspaceVersionierung
@selfagency/beans-mcp hat eine eigene Paketversionierung. Die Kompatibilität mit der
Beans CLI wird separat verfolgt.
Beim Start vergleicht der Server die installierte beans CLI-Version mit der
hartcodierten unterstützten Beans-Version: 0.4.2. Wenn sie abweichen, wird eine Warnung
auf stderr ausgegeben und der Start fortgesetzt.
Parameter
--workspace-rootoder Positionsargument: Pfad zum Workspace-Root--cli-path: Pfad zur Beans CLI--port: MCP-Server-Port (Standard: 39173)--log-dir: Log-Verzeichnis-h,--help: Verwendung anzeigen und beenden
Related MCP server: jira-cli-mcp
Zusammenfassung der öffentlichen MCP-Tools
Tool | Beschreibung |
| Workspace initialisieren (optional |
| Abgeschlossene/verworfene Beans archivieren. |
| Vollständige Bean-Details nach |
| Neues Bean erstellen (Titel/Typ + optionaler Body/Eltern). |
| Mehrere Beans in einem Aufruf erstellen, optional unter einem gemeinsamen Eltern. |
| Konsolidierte Metadaten + Body-Updates (Status/Typ/Priorität/Eltern/clearParent/blocking/blockedBy/body/bodyAppend/bodyReplace) plus optionaler optimistischer Parallelitätshinweis ( |
| Mehrere Beans in einem Aufruf aktualisieren, optional unter einem gemeinsamen Eltern neu zuordnen. |
| Alle Markdown-Checklisten-Aufgaben innerhalb eines Beans als erledigt markieren. |
| Ein oder mehrere Beans löschen ( |
| Ein abgeschlossenes oder verworfenes Bean wieder in einen aktiven Status versetzen. |
| Vereinheitlichte Liste/Suche/Filter/Sortierung/Bereitschaftsoperationen, mit GraphQL-Durchleitung. |
| Dateien unter |
| Erweiterungsausgabe-Logs lesen oder Anleitung anzeigen. |
Das
beans_query-Tool ist bewusst breit gefasst: Bevorzugen Sie es zum Auflisten, Suchen, Filtern oder Sortieren von Beans sowie zum Generieren von Copilot-Anweisungen (operation: 'llm_context').Alle Datei- und Log-Operationen validieren Pfade, um sie innerhalb des Workspace oder des VS Code-Log-Verzeichnisses zu halten. Das Präfix
.beans/wird automatisch von Pfaden entfernt – Sie können entwedersome-bean.mdoder.beans/some-bean.mdübergeben, das Ergebnis ist dasselbe.beans_updateersetzt viele feingranulare Update-Tools; Aufrufer sollten es verwenden, um die öffentliche Tool-Oberfläche klein und vorhersagbar zu halten.beans_archivebietet CLI-Parität zum Archivieren abgeschlossener/verworfener Beans.Das Schließen eines Eltern-Beans über
beans_update(status: completedoderstatus: scrapped) überträgt denselben Status auf alle Nachkommen.Das Wiederöffnen eines Eltern-Beans über
beans_reopenüberträgt den Zielstatus auf geschlossene Nachkommen (completed/scrapped).beans_bulk_createundbeans_bulk_updatearbeiten nach bestem Bemühen: Sie verarbeiten jedes Element sequentiell und geben ein Array mit Ergebnissen pro Element mit Erfolgs-/Fehlereinträgen zurück, anstatt atomar zu scheitern.Werte für
title:im Frontmatter werden beim Schreiben automatisch in doppelte Anführungszeichen gesetzt. Übergeben Sie rohe Titel – die Anführungszeichen und das Escaping werden für Sie erledigt.beans_bean_fileunterstütztupdate_frontmatterfür atomare Frontmatter-Only-Schreibvorgänge; unterstützte Felder umfassenprundbranch.Ungefilterte Listenergebnisse werden mit einer kurzen Burst-TTL und einer Timestamp-Probe-Aktualisierungsstrategie zwischengespeichert. Mutationstools (
beans_create,beans_update,beans_deleteusw.) invalidieren den Cache sofort.Versionsabweichungen zwischen
beans-mcpund der Beans CLI sind standardmäßig nur warnend und nicht blockierend.Wenn
beanIdin der Tool-Eingabe fehlt, enthalten Validierungsfehler einen Hinweis:Meinten Sie \beanId`?`.
Beispiele
Anfrage:
{ "prefix": "project" }Antwort (structuredContent):
{ "initialized": true }Anfrage:
{ "beanId": "bean-abc" }Anfrage (mehrere Beans):
{ "beanIds": ["bean-abc", "bean-def"] }Antwort (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"
}
}Anfrage:
{}Antwort (Beispiel):
{ "archived": true, "archivedCount": 3 }Anfrage:
{
"title": "Add dark mode",
"type": "feature",
"status": "todo",
"priority": "normal",
"body": "Implement theme toggle and styles",
"parent": "epic-123"
}
descriptionwird als veralteter Alias fürbodyakzeptiert.
Antwort (structuredContent):
{
"bean": {
"id": "new-1",
"title": "Add dark mode",
"status": "todo",
"type": "feature"
}
}Anfrage:
{
"parent": "epic-123",
"beans": [
{ "title": "Design mockups", "type": "task" },
{ "title": "Implement API", "type": "task", "priority": "high" },
{ "title": "Write tests", "type": "task", "parent": "epic-456" }
]
}Das übergeordnete parent wird als Standard auf jedes Bean angewendet, das kein eigenes parent angibt. Hier werden Design mockups und Implement API epic-123 zugewiesen; Write tests überschreibt mit epic-456.
Antwort (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" } }
]
}Anfrage (einen Batch von Aufgaben in Bearbeitung verschieben und einem Eltern zuweisen):
{
"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" }
]
}Antwort (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" } }
]
}Beide Bulk-Tools arbeiten nach bestem Bemühen: Teilfehler werden pro Element gemeldet, anstatt den gesamten Batch abzubrechen.
Anfrage (Status ändern und Blockierung hinzufügen):
{
"beanId": "bean-abc",
"status": "in-progress",
"blocking": ["bean-def"],
"ifMatch": "etag-value"
}Anfrage (atomare Body-Änderungen):
{
"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."
}Hinweis:
body(vollständiger Ersatz) kann nicht mitbodyAppendoderbodyReplacein derselben Anfrage kombiniert werden.
Antwort (structuredContent):
{
"bean": {
"id": "bean-abc",
"status": "in-progress",
"blockingIds": ["bean-def"]
}
}Anfrage:
{ "beanId": "bean-old", "force": false }Antwort:
{ "deleted": true, "beanId": "bean-old" }Batch-Anfrage:
{ "beanIds": ["bean-old", "bean-older"], "force": false }Batch-Antwort (Zusammenfassung):
{
"requestedCount": 2,
"deletedCount": 2,
"failedCount": 0,
"results": [
{ "beanId": "bean-old", "deleted": true },
{ "beanId": "bean-older", "deleted": true }
]
}Anfrage:
{
"beanId": "bean-closed",
"requiredCurrentStatus": "completed",
"targetStatus": "todo"
}Antwort:
{ "bean": { "id": "bean-closed", "status": "todo" } }Anfrage:
{ "beanId": "bean-abc" }Antwort:
{
"bean": {
"id": "bean-abc",
"status": "todo"
},
"totalTaskCount": 5,
"updatedTaskCount": 3,
"unchangedTaskCount": 2
}Aktualisieren (alle Beans auflisten):
{ "operation": "refresh" }Antwort (teilweise):
{ "count": 12, "beans": [] }Filtern (Status/Typen/Tags):
{
"operation": "filter",
"statuses": ["in-progress", "todo"],
"types": ["bug", "feature"],
"tags": ["auth"]
}Suche (Volltext):
{ "operation": "search", "search": "authentication", "includeClosed": false }Sortierung (Modi: status-priority-type-title, updated, created, id):
{ "operation": "sort", "mode": "updated" }Bereit (nur bearbeitbare Beans):
{ "operation": "ready" }LLM-Kontext (Copilot-Anweisungen generieren; optionales Schreiben in den Workspace):
{ "operation": "llm_context", "writeToWorkspaceInstructions": true }Antwort (structuredContent):
{
"graphqlSchema": "...",
"generatedInstructions": "...",
"instructionsPath": "/workspace/.github/instructions/beans-prime.instructions.md"
}Rohes GraphQL-Passthrough (CLI-Parität mit beans query):
{
"operation": "graphql",
"graphql": "{ beans(filter: { type: [\"bug\"] }) { id title status } }"
}Mit Variablen:
{
"operation": "graphql",
"graphql": "query($q: String!) { beans(filter: { search: $q }) { id title } }",
"variables": { "q": "authentication" }
}Anfrage (lesen):
{ "operation": "read", "path": "beans-vscode-123--title.md" }Antwort:
{
"path": "/workspace/.beans/beans-vscode-123--title.md",
"content": "---\n...frontmatter...\n---\n# Title\n"
}Anfrage (atomares Frontmatter-Update):
{
"operation": "update_frontmatter",
"path": "beans-vscode-123--title.md",
"fields": {
"status": "in-progress",
"pr": "123",
"branch": "feature/cascade-status-and-skills-npm"
}
}Antwort:
{
"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"
}
}Anfrage (letzte 200 Zeilen lesen):
{ "operation": "read", "lines": 200 }Antwort:
{
"path": "/workspace/.vscode/logs/beans-output.log",
"content": "...log lines...",
"linesReturned": 200
}Programmatische Verwendung
Installation
npm install beans-mcpBeispiel
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)
Erstellt und initialisiert eine Beans MCP Server-Instanz.
Optionen:
workspaceRoot(string): Pfad zum Beans-WorkspacecliPath(string, optional): Pfad zur Beans-CLI-Executable (Standard: 'beans')name(string, optional): Servername (Standard: 'beans-mcp-server')version(string, optional): ServerversionlogDir(string, optional): Verzeichnis für Server-Logsbackend(BackendInterface, optional): Benutzerdefinierte Backend-Implementierung
Rückgabe: { server: McpServer; backend: BackendInterface }
startBeansMcpServer(argv)
CLI-kompatibler Einstiegspunkt zum Starten des Servers.
Hilfsfunktionen
parseCliArgs(argv: string[]): CLI-Argumente parsenisPathWithinRoot(root: string, target: string): boolean: Prüfen, ob ein Pfad innerhalb des Root liegtsortBeans(beans, mode): Beans nach dem angegebenen Modus sortieren
Typen & Schemata
Export des GraphQL-Schemas, der Zod-Validierungsschemata und der TypeScript-Typen für Beans-Datensätze und -Operationen.
Agent Skills (skills-npm, skills.sh)
Dieses Paket enthält eine integrierte Agent Skill unter skills/ und veröffentlicht diese Skill auch in einem Format, das in das breitere Ökosystem der offenen Skills passt, das von skills.sh bereitgestellt wird.
Skill-Pfad im Paket:
skills/beans-mcp/SKILL.mdVeröffentlichtes Skill-Artefakt:
https://beans-mcp.self.agency/.well-known/agent-skills/beans-mcp/SKILL.mdVeröffentlichter Discovery-Index:
https://beans-mcp.self.agency/.well-known/agent-skills/index.jsonKompatibel mit Discovery-Tools, die scannen:
node_modules/**/skills/*/SKILL.md
Das bedeutet, Sie können es mit npm-basierten Workflows wie skills-npm verwenden und gleichzeitig Ökosystem-Tools auf das veröffentlichte Skill-Artefakt und den Discovery-Index verweisen, die von Skills-Katalogen wie skills.sh verwendet werden.
Um installierte npm-verpackte Skills in Ihren Agent-Workspace zu symbolisch verknüpfen, können Sie skills-npm in Ihrem konsumierenden Projekt verwenden.
Lizenz
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for Linear project management and issue tracking
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Kaiku is an issue tracker with a wiki, built so that people and AI agents work in the same place. Its hosted MCP server lets an agent search, read, file and update issues, comment and answer questions, read and write wiki pages, and attach files — with the permissions of the person whose token it uses. Create a token in Settings → Connect over MCP and send it as Authorization: Bearer <token> (or in X-Api-Key); the token says which workspace.
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.1915 npm2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that wraps the jira-cli command-line tool to enable AI assistants to interact with Jira.22 npm9MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for integrating Linear with Claude Code and other MCP clients. Enables issue management, project planning, and status tracking through a set of tools.-
- AlicenseNot gradedqualityAmaintenanceA 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.44 npm1MIT