MCP捆绑包
一个提供包模式、表达式语言和语法的基础Dart包, 标准港口合同和a 捆绑安装/标志/包装管道 MCP生态系统。这是其他MCP包所依赖的核心包。
概述
mcp_bundle 定义:
- 捆绑数据模型 —
McpBundle包括技能、配置文件、知识、清单、UI、流程、事实图和测试部分,以及完整性/策略/签名类型。 - 标准端口目录 --能力命名合同(
package:mcp_bundle/ports.dart)其他MCP包所实现的。 - 捆绑存储 —
BundleStoragePort使用文件/HTTP/内存适配器,以及存储库和资源访问器。 - 捆绑安装管道 --打包、签名、信任验证和安装策略。
- 表达式语言 --带有独立词法分析器/解析器/AST/计算器的芥末风格模板。
- 验证器 --模式、引用完整性和签名完整性检查。
标准端口目录
合同层 package:mcp_bundle/ports.dart每个端口都是一个名为其他包实现的抽象接口的功能。
| 域 | 端口 |
|---|---|
| UI/表单 | UiPort, FormPort, FormRendererPort, FormTemplatePort |
| 输入输出设备 | IoDevicePort, IoStreamPort, IoRegistryPort, IoPolicyPort, IoAuditPort |
| 知识 | FactsPort, EntitiesPort, ClaimsPort, EvidencePort, CandidatesPort, SummariesPort, PatternsPort, IndexPort, RetrievalPort, ContextBundlePort, KnowledgePorts (合计) |
| 简介 | AppraisalPort, DecisionPort, ExpressionPort, ProfileSummariesPort |
| 技能 | SkillRegistryPort, SkillRuntimePort |
| 运维 | WorkflowPort, PipelinePort, RunbookPort, RunsPort, ScheduleTriggerPort |
| 哲学 | PhilosophyPort, EthosStorePort |
| 分析 | AnalysisPort, AnalysisFunctionPort, AnalysisDataSourcePort |
| 流动 | FlowPort |
| 共享服务 | LlmPort, StoragePort, ChannelPort, MetricPort, MetricsPort, EventPort, NotificationPort, AuditPort, ApprovalPort, AssetPort, McpPort, IngestPorts |
import 'package:mcp_bundle/ports.dart';
class MyLlmAdapter extends LlmPort {
@override
LlmCapabilities get capabilities => const LlmCapabilities.full();
@override
Future complete(LlmRequest request) async {
// ...
}
}快速开始
import 'package:mcp_bundle/mcp_bundle.dart';
final bundle = McpBundle(
id: 'my_bundle',
name: 'My AI Bundle',
version: '1.0.0',
skills: [
BundleSkill(
id: 'summarizer',
name: 'Text Summarizer',
executor: 'llm',
prompt: 'Summarize: {{input.text}}',
),
],
profiles: [
BundleProfile(
id: 'assistant',
name: 'Helpful Assistant',
systemPrompt: 'You are a helpful assistant for {{user.name}}.',
),
],
);
final validator = BundleValidator();
final result = await validator.validate(bundle);
if (!result.isValid) {
print(result.errors);
}捆绑存储
BundleStoragePort bundle所在的抽象。三个内置适配器:
final fileStore = FileStorageAdapter(rootDir: '/path/to/bundles');
final httpStore = HttpStorageAdapter(baseUri: Uri.parse('https://example.com/bundles'));
final memStore = MemoryStorageAdapter();
final repo = BundleRepository(storage: fileStore);
final bundle = await repo.load('my_bundle');
final resources = bundle.resources; // ui/, assets/, etc.
final uiJson = await resources.readJson('ui/home.json');捆绑安装/签名/打包
A签名 .mcpb 配水管道:
final packer = McpBundlePacker();
final signer = BundleSigner(privateKeyPem: ...);
final installer = McpBundleInstaller(trustStore: TrustStore(...));
final packed = await packer.pack(bundle);
final signed = await signer.sign(packed);
final installed = await installer.install(
signed,
policy: const InstallPolicy.strict(),
);表达式语言
根据上下文映射评估芥末风格模板:
final expr = ExpressionEvaluator();
expr.evaluate('{{user.name}}', {'user': {'name': 'John'}});
// → 'John'
expr.evaluate('{{#isPremium}}Premium{{/isPremium}}', {'isPremium': true});
// → 'Premium'
expr.evaluate('{{#items}}Item: {{name}}\n{{/items}}', {
'items': [{'name': 'A'}, {'name': 'B'}],
});
// → 'Item: A\nItem: B\n'用户界面资源
捆绑包中UI的规范表示是磁盘上的 ui/ 保留文件夹,通过访问 BundleResources (bundle.uiResources.list / readJson / ...).每 ui/.json 地图到a ui:// MCP资源URI。
上的旧类型UI字段 UiSection 已弃用,仅作为旧捆绑包的前向compat往返通道存在。新工具应写在下面 ui/.
支持
许可证
麻省理工学院——见 许可证.
