@frontmcp/plugin-feature-flags

中文文档
1.12.2发布于 2026/11/15Apache-2.0TypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 5363

FrontMCP 特性旗插件 - 特性旗后动态闸门 MCP 能力

中文使用文档
文档目录12 节
  1. 安装
  2. 使用量
  3. 这个 featureFlag 选项
  4. 选项
  5. 自己的适配器
  6. 旗帜为 enabled
  7. this.featureFlags
  8. 当国旗服务失败时
  9. 文档
  10. 相关软件包
  11. 捐款
  12. 许可证

@ frontmcp/plugin-feature-flags (英语)

转换工具、资源、资源模板、提示、技能和代理 前线MCP 服务器 打开和关闭带有特征标记。 给出条目 featureFlag: 'bulk-export'而当那面旗子被关闭 呼叫者, 条目被从每个列表中忽略出来,并在被调用时被拒绝,这样您就可以在之前将一个能力发送给一些用户 每个人。 旗帜来自固定值、 启动暗中、 分拆、 解脱或您的适配器, 并分别被评价 来电 在你的密码里, this.featureFlags 读取一面旗帜.

npm License

安装

npm install @frontmcp/plugin-feature-flags

插件运行在 FrontMCP 服务器内, 因此您的应用程序需要 @frontmcp/sdk,与本软件包同版本,以及 节点.js 24或后.

旗下服务的SDK是可选的对等依赖. 为您使用的适配器安装 :

adapter安装
'launchdarkly'@launchdarkly/node-server-sdk (9个、10个)
'splitio'@splitsoftware/splitio (10,11) (中文(简体) )
'unleash'unleash-client (第5、6段)

没有它, 服务器无法启动错误, 如 LaunchDarkly SDK not found. Install it: npm install @launchdarkly/node-server-sdk编辑 'static' 财务报告和审定财务报表 'custom' 适配器不需要别的.

使用量

注册插件为 FeatureFlagPlugin.init()门条目 featureFlag数字 :

import { FeatureFlagPlugin } from '@frontmcp/plugin-feature-flags';
import { App, FrontMcp, Tool, ToolContext, z } from '@frontmcp/sdk';

@Tool({
  name: 'bulk_export',
  description: 'Export every ticket as CSV',
  inputSchema: {},
  featureFlag: 'bulk-export',
})
class BulkExportTool extends ToolContext {
  async execute() {
    return { csv: 'id,title\nT-1,Cannot log in' };
  }
}

@Tool({ name: 'search_tickets', description: 'Search support tickets', inputSchema: { query: z.string() } })
class SearchTicketsTool extends ToolContext {
  async execute({ query }: { query: string }) {
    const ranking = (await this.featureFlags.isEnabled('semantic-search', false)) ? 'semantic' : 'keyword';
    return { query, ranking, tickets: ['T-1'] };
  }
}

@App({ id: 'help-desk', name: 'Help Desk', tools: [SearchTicketsTool, BulkExportTool] })
class HelpDeskApp {}

@FrontMcp({
  info: { name: 'help-desk', version: '1.0.0' },
  apps: [HelpDeskApp],
  plugins: [
    FeatureFlagPlugin.init({
      adapter: 'static',
      flags: { 'bulk-export': false, 'semantic-search': true },
    }),
  ],
})
export default class Server {}

给 bulk_export 被删除 tools/list被拒绝 Tool "bulk_export" is disabled by feature flag "bulk-export" 代码 FEATURE_FLAG_DISABLED。 。 。 .

注册于 @FrontMcp,插件打开每个应用程序的条目。 登记在 @App它的大门 应用的条目, 以及任何没有自身特性旗插件的应用程序。 如果一个条目宣布 featureFlag 没有地标 插件到达它,服务器不会启动.

这个 featureFlag 选项

该插件添加 featureFlag 改为 @Tool, (中文(简体) ), @Resource, (中文(简体) ), @ResourceTemplate, (中文(简体) ), @Prompt, (中文(简体) ), @Skill 财务报告和审定财务报表 @Agent数字 :

表单含义
'key'由国旗标注 key。当适配器没有答案时,条目即关闭,除非插件 gateDefaultValue 实值 true。 。 。 .
{ key, defaultValue }同样,除了 defaultValue 决定适配器何时对旗帜没有答案,或扔出. 适配器的一面旗子就停了.

选项

adapter 选择旗帜来自何处,以及它需要哪些其他选项:

adapter所需经费旗帜来自
'static'flags: Record<string, boolean | FeatureFlagVariant>你给的价值.
'launchdarkly'config: { sdkKey }发射黑暗.
'splitio'config: { apiKey }分开.
'unleash'config: { url, appName, apiKey? }释出.
'custom'adapterInstance: FeatureFlagAdapter你的适应器.

每个适配器还需要:

选项类型默认说明
defaultValuebooleanfalse什麽 this.featureFlags.isEnabled() 返回,当调用不通过默认时,指向未知的旗帜或错误.
gateDefaultValuebooleanfalse哪些列表和大门回答未知的旗帜, 或适配器错误, 当条目是 featureFlag 没有 defaultValue。 。 。 . true 无法打开 .
cacheStrategy'session' | 'request' | 'none''none'缓冲 this.featureFlags.isEnabled() 结果。 列表和大门从不缓存 .
cacheTtlMsnumber30000缓存结果持续多久, 以毫秒计 .
userIdResolver(ctx: FrontMcpContext) => string | undefined签名用户这个 userId 适配器评估旗帜。 一个匿名电话商没有.
attributesResolver(ctx: FrontMcpContext) => Record<string, unknown>{}瞄准属性,如租户或计划.

FeatureFlagPlugin.init() 没有支持 adapter 丢出一个 FeatureFlagConfigurationError。 。 。 .

FeatureFlagPlugin.init({
  adapter: 'launchdarkly',
  config: { sdkKey: process.env.LAUNCHDARKLY_SDK_KEY! },
  attributesResolver: (ctx) => ({ plan: ctx.authInfo?.extra?.['plan'] }),
});

自己的适配器

传递任何执行对象 FeatureFlagAdapter 作为 adapterInstance此处 flagService 代表你的旗帜 服务的客户端 :

import { FeatureFlagPlugin, type FeatureFlagAdapter } from '@frontmcp/plugin-feature-flags';

const flagAdapter: FeatureFlagAdapter = {
  async isEnabled(flagKey, context) {
    return (await flagService.isOn(flagKey, context.userId)) === true;
  },
  async getVariant(flagKey, context) {
    const enabled = (await flagService.isOn(flagKey, context.userId)) === true;
    return { name: enabled ? 'on' : 'off', value: enabled, enabled };
  },
  async evaluateFlags(flagKeys, context) {
    const results = new Map<string, boolean>();
    for (const flagKey of flagKeys) {
      const answer = await flagService.isOn(flagKey, context.userId);
      if (answer !== undefined) results.set(flagKey, answer);
    }
    return results;
  },
};

FeatureFlagPlugin.init({ adapter: 'custom', adapterInstance: flagAdapter });
  • evaluateFlags() 名单、大门和 this.featureFlags.isEnabled() 电话 留个钥匙 你什么都不知道 约,所以打电话者 defaultValue 应用; 回答 false 为了一面旗子的关闭.
  • getVariant() 服务 this.featureFlags.getVariant()。 。 。 . isEnabled() 需要,尽管插件不叫它.
  • 可选 initialize() 服务器启动时运行,以及 destroy() 当被处理.
  • 可选 subscribe(listener) 电话 listener 当旗帜可能已经更改并返回停止的函数时 这个 用它,旗子翻转发送连接的客户端 list_changed 上面有你们的旗门 斯普利特.io号, 暗地发射和Unleash适配器执行.

内置适配器也导出: StaticFeatureFlagAdapter, (中文(简体) ), LaunchDarklyFeatureFlagAdapter, (中文(简体) ), SplitioFeatureFlagAdapter 财务报告和审定财务报表 UnleashFeatureFlagAdapter。 。 。 .

旗帜为 enabled

featureFlagSource(adapter, ref) 作为SDK的旗帜 EnabledSource,用于 enabled 工具、资源、模板 或迅速。 给插件一个相同的适配器。 SDK 然后过滤列表, 拒绝该条目 FEATURE_OFF 补救措施 Turn on the feature flag "beta".发送 list_changed 当适配器报告变化时。 这个 一个适配器的源在 SDK 客户端上共享一个收听器 :

import { FeatureFlagPlugin, featureFlagSource, UnleashFeatureFlagAdapter } from '@frontmcp/plugin-feature-flags';

const flags = new UnleashFeatureFlagAdapter({ url: 'https://unleash.example.com/api', appName: 'my-mcp-server' });

@Tool({ name: 'beta_report', inputSchema: {}, enabled: featureFlagSource(flags, 'beta-reports') })
class BetaReportTool extends ToolContext {}

FeatureFlagPlugin.init({ adapter: 'custom', adapterInstance: flags });

this.featureFlags

this.featureFlags 可用工具、资源和提示,并评估当前呼叫者的旗帜:

方法回返说明
isEnabled(flagKey, defaultValue?)Promise<boolean>国旗价值. 对于未知的旗帜,或适配器错误: defaultValue,否则插件的,否则 false。 。 。 .
getVariant(flagKey)Promise<FeatureFlagVariant>旗帜的变体, { name, value, enabled }。适配器错误被抛出.
evaluateFlags(flagKeys)Promise<Map<string, boolean>>在一个适配器呼叫中几面旗帜. 适配器错误被抛出 .
resolveRef(ref)Promise<boolean>A 的价值 featureFlag 参考:密钥,或 { key, defaultValue }。 。 。 .

this.get(FeatureFlagAccessorToken) 返回同一个访问器,并且 this.tryGet(FeatureFlagAccessorToken) 返回它 或者说 undefined 在未安装插件的地方.

当国旗服务失败时

何处适配器抛出时会发生什么
名单,例如 tools/list裁判 defaultValue,否则插件的 gateDefaultValue,则 false在日志中发出警告。 余所表已讫.
一个大门,比如 tools/call裁判 defaultValue,否则插件的 gateDefaultValue,则 false。 。 。 .
this.featureFlags.isEnabled()电话是 defaultValue,否则插件的 defaultValue,则 false。 。 。 .
getVariant(), (中文(简体) ), evaluateFlags()错误被丢入您的代码 .

最多 1.11.2 个列表因适配器出错而失败(-32603),并且没有应用默认值.

文档

捐款

资料来源: plugins/plugin-feature-flags问题 欢迎抽取请求;见 捐款额。 。 。 .

许可证

阿帕奇2.0 (英语). 见 自由主义。 。 。 .

版本与发布记录

@frontmcp/plugin-feature-flags 共发布 98 个版本,首次发布于 2026/03/17;过去 12 个月发布了 98 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.12.2latest2026/11/151 天前
1.12.12026/11/132 天前
1.12.02026/11/114 天前
1.12.0-rc.1rc2026/11/114 天前
1.11.32026/11/106 天前
1.11.22026/11/096 天前

其他发布通道:beta → 1.1.2-beta.1,rc → 1.12.0-rc.1。

关于 @frontmcp/plugin-feature-flags 的常见问题

@frontmcp/plugin-feature-flags 是什么?

FrontMCP 特性旗插件 - 特性旗后动态闸门 MCP 能力

如何安装 @frontmcp/plugin-feature-flags?

在项目目录运行 npm install @frontmcp/plugin-feature-flags,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@frontmcp/sdk(1.12.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@frontmcp/plugin-feature-flags 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@frontmcp/plugin-feature-flags 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@frontmcp/plugin-feature-flags 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@frontmcp/plugin-feature-flags 可以商用吗?

@frontmcp/plugin-feature-flags 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@frontmcp/plugin-feature-flags 的下载量有多少?

根据 npm 官方下载统计,@frontmcp/plugin-feature-flags 在 2026/10/16 – 2026/11/14 这 30 天内被下载 5,363 次,日均约 179 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@frontmcp/plugin-feature-flags 还在维护吗?

最新版本 1.12.2 发布于 2026/11/15(1 天前);至今共发布 98 个版本,其中过去 12 个月发布了 98 个;首次发布于 2026/03/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。