@selfagency/beans-mcp
Official@selfagency/beans-mcp 🫘
Сервер MCP (Model Context Protocol) для трекера задач Beans. Предоставляет программный и CLI-интерфейсы для AI-взаимодействий с рабочими пространствами Beans.
Документация: beans-mcp.self.agency
🤖 Попробуйте Beans в полной интеграции с GitHub Copilot в VS Code! Установите расширение selfagency.beans-vscode.
Использование
npx @selfagency/beans-mcp /path/to/workspaceВерсионирование
@selfagency/beans-mcp имеет собственное версионирование пакета. Совместимость с CLI Beans отслеживается отдельно.
При запуске сервер сравнивает установленную версию CLI beans с жёстко заданной поддерживаемой версией Beans: 0.4.2. Если они различаются, выводится предупреждение в stderr, и запуск продолжается.
Параметры
--workspace-rootили позиционный аргумент: путь к корню рабочего пространства--cli-path: путь к CLI Beans--port: порт сервера MCP (по умолчанию: 39173)--log-dir: каталог для логов-h,--help: вывод справки и выход
Related MCP server: jira-cli-mcp
Сводка публичных инструментов MCP
Инструмент | Описание |
| Инициализация рабочего пространства (опциональный |
| Архивирование завершённых/отменённых beans. |
| Получение полных деталей bean по |
| Создание нового bean (заголовок/тип + опциональные тело/родитель). |
| Создание нескольких beans за один вызов, опционально под общим родителем. |
| Объединённые обновления метаданных + тела (статус/тип/приоритет/родитель/clearParent/blocking/blockedBy/body/bodyAppend/bodyReplace) плюс опциональная подсказка оптимистичной блокировки ( |
| Обновление нескольких beans за один вызов, опционально с переназначением общего родителя. |
| Отметить все задачи в markdown-списке внутри bean как выполненные. |
| Удаление одного или нескольких beans ( |
| Переоткрытие завершённого или отменённого bean в активный статус. |
| Унифицированные операции список/поиск/фильтр/сортировка/готовность с возможностью передачи GraphQL. |
| Чтение/редактирование/создание/удаление файлов в |
| Чтение логов вывода расширения или отображение инструкций. |
Инструмент
beans_queryнамеренно широк: предпочитайте его для списка, поиска, фильтрации или сортировки beans, а также для генерации инструкций Copilot (operation: 'llm_context').Все операции с файлами и логами проверяют пути, чтобы они оставались в пределах рабочего пространства или каталога логов VS Code. Префикс
.beans/автоматически удаляется из путей — вы можете передать какsome-bean.md, так и.beans/some-bean.md, результат будет одинаковым.beans_updateзаменяет множество узкоспециализированных инструментов обновления; вызывающие стороны должны использовать его, чтобы сохранить поверхность публичных инструментов небольшой и предсказуемой.beans_archiveобеспечивает паритет с CLI для архивирования завершённых/отменённых beans.Закрытие родительского bean через
beans_update(status: completedилиstatus: scrapped) каскадно применяет тот же статус ко всем потомкам.Переоткрытие родительского bean через
beans_reopenкаскадно применяет целевой статус к закрытым потомкам (completed/scrapped).beans_bulk_createиbeans_bulk_updateработают по принципу «максимальных усилий»: они обрабатывают каждый элемент последовательно и возвращают массив результатов для каждого элемента с записями об успехе/ошибке, а не атомарно.Значения
title:в frontmatter автоматически заключаются в двойные кавычки при записи. Передавайте сырые заголовки — кавычки и экранирование обрабатываются за вас.beans_bean_fileподдерживаетupdate_frontmatterдля атомарной записи только frontmatter; поддерживаемые поля включаютprиbranch.Результаты нефильтрованных списков кэшируются с коротким TTL и стратегией обновления по временной метке. Инструменты мутации (
beans_create,beans_update,beans_deleteи т.д.) немедленно инвалидируют кэш.Несоответствия версий между
beans-mcpи CLI Beans являются только предупреждениями и не блокируют работу.Когда
beanIdотсутствует во входных данных инструмента, ошибки валидации включают подсказку:Возможно, вы имели в виду \beanId`?`.
Примеры
Запрос:
{ "prefix": "project" }Ответ (structuredContent):
{ "initialized": true }Запрос:
{ "beanId": "bean-abc" }Запрос (несколько beans):
{ "beanIds": ["bean-abc", "bean-def"] }Ответ (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"
}
}Запрос:
{}Ответ (пример):
{ "archived": true, "archivedCount": 3 }Запрос:
{
"title": "Add dark mode",
"type": "feature",
"status": "todo",
"priority": "normal",
"body": "Implement theme toggle and styles",
"parent": "epic-123"
}
descriptionпринимается как устаревший псевдоним дляbody.
Ответ (structuredContent):
{
"bean": {
"id": "new-1",
"title": "Add dark mode",
"status": "todo",
"type": "feature"
}
}Запрос:
{
"parent": "epic-123",
"beans": [
{ "title": "Design mockups", "type": "task" },
{ "title": "Implement API", "type": "task", "priority": "high" },
{ "title": "Write tests", "type": "task", "parent": "epic-456" }
]
}Родитель верхнего уровня parent применяется как значение по умолчанию для любого bean, который не указывает собственного parent. Здесь Design mockups и Implement API назначаются на epic-123; Write tests переопределяет на epic-456.
Ответ (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" } }
]
}Запрос (переместить группу задач в статус «в работе» и назначить им родителя):
{
"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" }
]
}Ответ (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" } }
]
}Оба массовых инструмента работают по принципу «максимальных усилий»: частичные сбои сообщаются для каждого элемента, а не прерывают всю операцию.
Запрос (изменить статус и добавить блокировку):
{
"beanId": "bean-abc",
"status": "in-progress",
"blocking": ["bean-def"],
"ifMatch": "etag-value"
}Запрос (атомарные изменения тела):
{
"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."
}Примечание:
body(полная замена) нельзя комбинировать сbodyAppendилиbodyReplaceв одном запросе.
Ответ (structuredContent):
{
"bean": {
"id": "bean-abc",
"status": "in-progress",
"blockingIds": ["bean-def"]
}
}Запрос:
{ "beanId": "bean-old", "force": false }Ответ:
{ "deleted": true, "beanId": "bean-old" }Пакетный запрос:
{ "beanIds": ["bean-old", "bean-older"], "force": false }Пакетный ответ (сводка):
{
"requestedCount": 2,
"deletedCount": 2,
"failedCount": 0,
"results": [
{ "beanId": "bean-old", "deleted": true },
{ "beanId": "bean-older", "deleted": true }
]
}Запрос:
{
"beanId": "bean-closed",
"requiredCurrentStatus": "completed",
"targetStatus": "todo"
}Ответ:
{ "bean": { "id": "bean-closed", "status": "todo" } }Запрос:
{ "beanId": "bean-abc" }Ответ:
{
"bean": {
"id": "bean-abc",
"status": "todo"
},
"totalTaskCount": 5,
"updatedTaskCount": 3,
"unchangedTaskCount": 2
}Обновление (список всех beans):
{ "operation": "refresh" }Ответ (частичный):
{ "count": 12, "beans": [] }Фильтр (статусы/типы/теги):
{
"operation": "filter",
"statuses": ["in-progress", "todo"],
"types": ["bug", "feature"],
"tags": ["auth"]
}Поиск (полнотекстовый):
{ "operation": "search", "search": "authentication", "includeClosed": false }Сортировка (режимы: status-priority-type-title, updated, created, id):
{ "operation": "sort", "mode": "updated" }Готовность (только активные beans):
{ "operation": "ready" }Контекст LLM (генерация инструкций Copilot; опциональная запись в рабочее пространство):
{ "operation": "llm_context", "writeToWorkspaceInstructions": true }Ответ (structuredContent):
{
"graphqlSchema": "...",
"generatedInstructions": "...",
"instructionsPath": "/workspace/.github/instructions/beans-prime.instructions.md"
}Прямая передача GraphQL (паритет с CLI beans query):
{
"operation": "graphql",
"graphql": "{ beans(filter: { type: [\"bug\"] }) { id title status } }"
}С переменными:
{
"operation": "graphql",
"graphql": "query($q: String!) { beans(filter: { search: $q }) { id title } }",
"variables": { "q": "authentication" }
}Запрос (чтение):
{ "operation": "read", "path": "beans-vscode-123--title.md" }Ответ:
{
"path": "/workspace/.beans/beans-vscode-123--title.md",
"content": "---\n...frontmatter...\n---\n# Title\n"
}Запрос (атомарное обновление frontmatter):
{
"operation": "update_frontmatter",
"path": "beans-vscode-123--title.md",
"fields": {
"status": "in-progress",
"pr": "123",
"branch": "feature/cascade-status-and-skills-npm"
}
}Ответ:
{
"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"
}
}Запрос (чтение последних 200 строк):
{ "operation": "read", "lines": 200 }Ответ:
{
"path": "/workspace/.vscode/logs/beans-output.log",
"content": "...log lines...",
"linesReturned": 200
}Программное использование
Установка
npm install beans-mcpПример
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)
Создаёт и инициализирует экземпляр сервера Beans MCP.
Параметры:
workspaceRoot(string): путь к рабочему пространству BeanscliPath(string, опционально): путь к исполняемому файлу CLI Beans (по умолчанию: 'beans')name(string, опционально): имя сервера (по умолчанию: 'beans-mcp-server')version(string, опционально): версия сервераlogDir(string, опционально): каталог для логов сервераbackend(BackendInterface, опционально): пользовательская реализация бэкенда
Возвращает: { server: McpServer; backend: BackendInterface }
startBeansMcpServer(argv)
Точка входа, совместимая с CLI, для запуска сервера.
Вспомогательные функции
parseCliArgs(argv: string[]): разбор аргументов CLIisPathWithinRoot(root: string, target: string): boolean: проверка, находится ли путь внутри корняsortBeans(beans, mode): сортировка beans по указанному режиму
Типы и схемы
Экспорт схемы GraphQL, схем валидации Zod и TypeScript-типов для записей и операций Beans.
Навыки агента (skills-npm, skills.sh)
Этот пакет поставляется со встроенным навыком агента в skills/, а также публикует этот навык в формате, подходящем для более широкой экосистемы открытых навыков, представленной на skills.sh.
Путь к навыку в пакете:
skills/beans-mcp/SKILL.mdОпубликованный артефакт навыка:
https://beans-mcp.self.agency/.well-known/agent-skills/beans-mcp/SKILL.mdОпубликованный индекс обнаружения:
https://beans-mcp.self.agency/.well-known/agent-skills/index.jsonСовместим с инструментами обнаружения, которые сканируют:
node_modules/**/skills/*/SKILL.md
Это означает, что вы можете использовать его с npm-ориентированными рабочими процессами, такими как skills-npm, а также указывать инструментам экосистемы на опубликованный артефакт навыка и индекс обнаружения, используемые каталогами навыков, такими как skills.sh.
Чтобы создать символическую ссылку на установленные npm-пакеты навыков в вашем рабочем пространстве агента, вы можете использовать skills-npm в вашем потребляющем проекте.
Лицензия
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.
Official Fibery MCP server: query and update your workspace from any AI client via OAuth.
Official Duck Framework MCP server for AI-assisted development and project scaffolding.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
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.1925 npm2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that wraps the jira-cli command-line tool to enable AI assistants to interact with Jira.8 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 gradedqualityFmaintenanceA 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.67 npm1MIT