Skip to main content
Glama
selfagency

@selfagency/beans-mcp

Official
by selfagency

@selfagency/beans-mcp 🫘

Test & Build codecov NPM Version

Сервер 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_init

Инициализация рабочего пространства (опциональный prefix).

beans_archive

Архивирование завершённых/отменённых beans.

beans_view

Получение полных деталей bean по beanId или beanIds.

beans_create

Создание нового bean (заголовок/тип + опциональные тело/родитель).

beans_bulk_create

Создание нескольких beans за один вызов, опционально под общим родителем.

beans_update

Объединённые обновления метаданных + тела (статус/тип/приоритет/родитель/clearParent/blocking/blockedBy/body/bodyAppend/bodyReplace) плюс опциональная подсказка оптимистичной блокировки (ifMatch).

beans_bulk_update

Обновление нескольких beans за один вызов, опционально с переназначением общего родителя.

beans_complete_tasks

Отметить все задачи в markdown-списке внутри bean как выполненные.

beans_delete

Удаление одного или нескольких beans (beanId или beanIds, опциональный force).

beans_reopen

Переоткрытие завершённого или отменённого bean в активный статус.

beans_query

Унифицированные операции список/поиск/фильтр/сортировка/готовность с возможностью передачи GraphQL.

beans_bean_file

Чтение/редактирование/создание/удаление файлов в .beans.

beans_output

Чтение логов вывода расширения или отображение инструкций.

  • Инструмент 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 transport

API

createBeansMcpServer(opts)

Создаёт и инициализирует экземпляр сервера Beans MCP.

Параметры:

  • workspaceRoot (string): путь к рабочему пространству Beans

  • cliPath (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[]): разбор аргументов CLI

  • isPathWithinRoot(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

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
5dRelease cycle
10Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    C
    maintenance
    A 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.
    19
    24
    2
    MIT
  • F
    license
    -
    quality
    D
    maintenance
    MCP server for integrating Linear with Claude Code and other MCP clients. Enables issue management, project planning, and status tracking through a set of tools.
  • A
    license
    -
    quality
    A
    maintenance
    A 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.
    73
    1
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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