Files
goodbuddy/src/shared/builtin-mcp-servers.ts
T
mesalogo 66f77b83c2 feat: let agents read supervisor story graphs
Expose saved decisions, timelines and source evidence through read-only Story Graph tools across Model, Harness and local/remote OpenCode and Continue. Supervisor enablement and runtime assignments govern discovery and calls; reads do not invoke models or modify stored evidence. Remote use requires matching Desktop and Agent changes.

Make Continue discussion show the complete editable message with a separated destination and shared action layout. Sending uses the visible draft without reattaching removed context.

Validation: existing focused MCP, runtime, controlled Linux Host, discussion component and Electron layout checks plus typechecks; staged diff check passed. Cross-scope fact reuse, historical reconstruction and full package acceptance remain deferred.

Release note: Agents can consult saved supervisor decisions and their sources when continuing work. Continue discussion now lets you review and edit the complete message before sending.
2026-09-28 12:38:00 +08:00

115 lines
3.7 KiB
TypeScript

import type {
BuiltinMcpServerId,
RuntimeTarget
} from './capability-contracts'
import {
knowledgeScopedDataTools,
magicNoteScopedDataTools
} from './scoped-data-tools'
import { goodbuddyConfigTools } from './goodbuddy-config-tools'
import { builtinModelTools } from './builtin-model-tools'
import { obsidianScopedDataTools } from './obsidian-tools'
import { storyGraphTools } from './story-graph-tools'
export type BuiltinMcpServerSummary = {
id: BuiltinMcpServerId
name: string
description: string
tools: readonly {
name: string
description: string
access: 'read' | 'write'
}[]
supportedAssignments: readonly RuntimeTarget[]
access: 'read' | 'mixed'
authorization: 'conversation-scoped'
requiresFeature?: 'magic-notes'
computerCapabilityId?: 'host-browser-control'
}
export const builtinMcpServers = [
{
id: 'story-graph',
name: 'Story Graph',
description: 'Read stored work decisions, their evolution and source evidence while Supervisor is enabled.',
tools: storyGraphTools.map(({ name, summary, access }) => ({ name, description: summary, access })),
supportedAssignments: ['model', 'opencode', 'continue', 'deepseek-harness'],
access: 'read',
authorization: 'conversation-scoped'
},
{
id: 'obsidian',
name: 'Obsidian',
description: '读取、搜索和管理本机 Obsidian 仓库中的笔记、目录、标签与附件。',
tools: obsidianScopedDataTools.map(({ name, summary, access }) => ({
name,
description: summary,
access
})),
supportedAssignments: ['model', 'opencode', 'continue'],
access: 'mixed',
authorization: 'conversation-scoped'
},
{
id: 'knowledge-base',
name: '知识库',
description:
'列出并搜索当前对话明确选择的知识库,返回可核验的来源与证据引用。',
tools: knowledgeScopedDataTools.map(({ name, summary, access }) => ({
name,
description: summary,
access
})),
supportedAssignments: ['model', 'opencode', 'continue'],
access: 'read',
authorization: 'conversation-scoped'
},
{
id: 'magic-notes',
name: '笔记',
description:
'读取全局魔法笔记,并在 Execute 模式下创建、修改或删除笔记与记录。',
tools: magicNoteScopedDataTools.map(({ name, summary, access }) => ({
name,
description: summary,
access
})),
supportedAssignments: ['model', 'opencode', 'continue'],
access: 'mixed',
authorization: 'conversation-scoped',
requiresFeature: 'magic-notes'
},
{
id: 'goodbuddy-config',
name: 'GoodBuddy 配置',
description:
'发现常见配置示例,读取脱敏配置,并通过计划和原生确认管理应用偏好、Skills 与 MCP。',
tools: goodbuddyConfigTools.map(({ name, summary, access }) => ({
name,
description: summary,
access
})),
supportedAssignments: ['model', 'opencode', 'continue'],
access: 'mixed',
authorization: 'conversation-scoped'
},
{
id: 'builtin-browser',
name: '内置浏览器',
description:
'允许已分配的 Runtime 使用 GoodBuddy 临时隔离浏览器,不会控制客户端已安装的浏览器;关闭此能力不影响你在浏览器工作栏中手动操作。',
tools: builtinModelTools
.filter((tool) => tool.group === 'browser')
.map(({ name, description, access }) => ({
name,
description,
access
})),
supportedAssignments: ['model', 'opencode', 'continue'],
access: 'mixed',
authorization: 'conversation-scoped',
computerCapabilityId: 'host-browser-control'
}
] as const satisfies readonly BuiltinMcpServerSummary[]