Dart基础包

为MCP生态系统提供基础Dart包,包含数据模型、标准端口契约、存储、安装管道和表达式语言等功能。

  • by app-appplayer
  • Dart
  • 本地部署
  • 更新于
在 GitHub 查看 app-appplayer/mcp_bundle

使用说明

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<LlmResponse> 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/<rel>.json 地图到a ui://<rel> MCP资源URI。

上的旧类型UI字段 UiSection 已弃用,仅作为旧捆绑包的前向compat往返通道存在。新工具应写在下面 ui/.

支持

许可证

麻省理工学院——见 许可证.