跳转到内容

模板变量参考

本页面提供了自定义指令模板中所有可用变量的完整参考。

HTML 转义行为

重要: 1MCP 默认配置 Handlebars 时使用 noEscape: true,这意味着所有模板变量都输出未转义的内容。这专门为 LLM 指令模板设计,HTML 转义会干扰可读性和 AI 解析。

  • 所有变量都未转义: 所有内容使用常规 {{variable}} 语法
  • XML 标签清晰渲染: <server-name> 输出为 <server-name>(不是 HTML 实体)
  • 无需三重括号: {{instructions}} 直接输出原始内容

服务器状态变量

{{serverCount}}

  • 类型: number
  • 描述: 连接且有指令的服务器数量(旧版 - 保留用于向后兼容)
  • 示例: 3
  • 注意: 仅计算具有非空指令的服务器。新模板请使用 instructionalServerCount

{{instructionalServerCount}}

  • 类型: number
  • 描述: 连接且有指令的服务器数量(serverCount 的更清晰名称)
  • 示例: 3
  • 注意: 仅计算具有非空指令的服务器

{{connectedServerCount}}

  • 类型: number
  • 描述: 连接的服务器总数(包括没有指令的服务器)
  • 示例: 5
  • 注意: 计算所有连接的服务器,无论是否有指令

{{hasServers}}

  • 类型: boolean
  • 描述: 是否有任何有指令的服务器连接
  • 示例: true
  • 用法: 模板逻辑的主要条件(与 hasInstructionalServers 相同)

{{hasInstructionalServers}}

  • 类型: boolean
  • 描述: 是否有任何有指令的服务器连接
  • 示例: true
  • 用法: 显示基于指令内容的主要条件

{{serverList}}

  • 类型: string
  • 描述: 服务器名称的换行分隔列表(字母顺序)
  • 示例: "api-server\ndatabase-server\nweb-server"
  • 用法: 用于简单文本列表

{{serverNames}}

  • 类型: array<string>
  • 描述: 用于迭代的服务器名称数组
  • 示例: ["api-server", "database-server", "web-server"]
  • 用法: 与 {{#each}} 辅助函数一起用于自定义格式化

{{servers}}

  • 类型: array<ServerData>
  • 描述: 用于详细迭代和条件逻辑的服务器对象数组
  • 结构:
    typescript
    interface ServerData {
      name: string; // 服务器名称(例如 "api-server")
      instructions: string; // 服务器指令内容
      hasInstructions: boolean; // 此服务器是否有指令
    }
  • 用法: 与 {{#each}} 一起使用以获得最大的模板灵活性
  • 示例:
text
{{#each servers}}
{{#if hasInstructions}}
### {{name}} 服务器
<{{name}}>
{{instructions}}
</{{name}}>
{{/if}}
{{/each}}

{{pluralServers}}

  • 类型: string
  • 描述: 基于有指令服务器数量的语法正确的单数/复数形式
  • : "server"(instructionalServerCount = 1)或 "servers"(instructionalServerCount ≠ 1)
  • 示例: "servers"

{{isAre}}

  • 类型: string
  • 描述: 基于有指令服务器数量的语法正确的动词形式
  • : "is"(instructionalServerCount = 1)或 "are"(instructionalServerCount ≠ 1)
  • 示例: "are"

{{connectedPluralServers}}

  • 类型: string
  • 描述: 基于连接服务器总数的语法正确的单数/复数形式
  • : "server"(connectedServerCount = 1)或 "servers"(connectedServerCount ≠ 1)
  • 示例: "servers"

{{connectedIsAre}}

  • 类型: string
  • 描述: 基于连接服务器总数的语法正确的动词形式
  • : "is"(connectedServerCount = 1)或 "are"(connectedServerCount ≠ 1)
  • 示例: "are"

内容变量

{{instructions}}

  • 类型: string(未转义)

  • 描述: 包装在 XML 样式标签中的所有服务器指令

  • 格式: <server-name>\n指令...\n</server-name>

  • 用法: 使用常规 {{instructions}} 语法(默认未转义)

  • 示例:

    xml
    <api-server>
    用于后端服务的 API 服务器指令
    </api-server>
    
    <web-server>
    用于前端开发的网页服务器指令
    </web-server>

{{filterContext}}

  • 类型: string
  • 描述: 活动过滤的描述,如果没有则为空字符串
  • 示例:
    • ""(无过滤)
    • " (按标签过滤: backend, api)"
    • " (按高级表达式过滤)"
    • " (按预设过滤)"

配置变量

{{title}}

  • 类型: string
  • 描述: 指令模板的标题
  • 默认值: "1MCP - Model Context Protocol Proxy"
  • 可自定义: 可以在配置中覆盖
  • 示例: "我的自定义 MCP 网关"

{{toolPattern}}

  • 类型: string
  • 描述: 代理使用的工具命名模式
  • 默认值: "{server}_1mcp_{tool}"
  • 可自定义: 可以在配置中覆盖
  • 示例: "{server}::{tool}"

{{examples}}

  • 类型: array<ToolExample>
  • 描述: 用于文档的工具示例数组
  • 结构:
    typescript
    interface ToolExample {
      name: string; // 应用了模式的工具名称
      description: string; // 工具的功能
    }

默认示例

工具名称描述
filesystem_1mcp_read_file通过文件系统服务器读取文件
web_1mcp_search通过网页服务器搜索网页
database_1mcp_query通过数据库服务器查询数据库

自定义示例

您可以在配置中提供自定义示例:

json
{
  "examples": [
    {
      "name": "custom_1mcp_analyze",
      "description": "通过自定义服务器分析数据"
    },
    {
      "name": "monitor_1mcp_check",
      "description": "通过监控服务器检查系统健康"
    }
  ]
}

变量使用示例

基本替换

text
连接到 {{connectedServerCount}} 个 {{connectedPluralServers}}
有指令的: {{instructionalServerCount}} 个 {{pluralServers}}

输出: 连接到 5 个服务器 输出: 有指令的: 3 个服务器

条件内容

text
{{#if hasServers}}
  {{connectedServerCount}} 个 {{connectedPluralServers}} 已连接
  {{#if hasInstructionalServers}}
    {{instructionalServerCount}} 个 {{pluralServers}} 正在提供指令
  {{else}}
    暂无服务器提供指令
  {{/if}}
{{else}}
  没有连接服务器
{{/if}}

服务器迭代(简单)

text
{{#each serverNames}}
- 服务器: {{this}}
{{/each}}

服务器迭代(详细)

text
{{#each servers}}
{{#if hasInstructions}}
#### {{name}} 功能
<{{name}}>
{{instructions}}
</{{name}}>
{{/if}}
{{/each}}

工具示例

text
可用工具:
{{#each examples}}
- `{{name}}`: {{description}}
{{/each}}

复杂模板

text
# {{title}}

## 状态: {{#if hasServers}}✅ 已连接{{else}}⏳ 等待中{{/if}}

{{#if hasServers}}
**{{connectedServerCount}} 个 {{connectedPluralServers}} 已连接**{{filterContext}}

### 服务器
{{#each serverNames}}
- 🔧 {{this}}
{{/each}}

{{#if hasInstructionalServers}}
### 指令
{{instructions}}

### 示例工具
{{#each examples}}
- `{{name}}` - {{description}}
{{/each}}

*工具使用模式: `{{toolPattern}}`*
{{else}}
*服务器已连接但尚未提供指令*
{{/if}}
{{else}}
等待服务器连接...
{{/if}}

变量范围和上下文

过滤影响

当过滤激活时,变量反映过滤的子集:

  • {{connectedServerCount}} = 所有过滤后的服务器数量
  • {{instructionalServerCount}} = 有指令的过滤后服务器数量
  • {{serverNames}} = 仅过滤后的服务器名称
  • {{instructions}} = 仅来自过滤后服务器的指令
  • {{filterContext}} = 活动过滤器的描述

字母顺序

服务器相关变量保持一致的字母顺序:

  • {{serverList}} 按字母顺序排序
  • {{serverNames}} 数组按字母顺序排序
  • {{instructions}} 部分按字母顺序出现

实时更新

所有变量都反映当前状态:

  • 服务器连接/断开更新计数
  • 指令更改更新内容
  • 过滤更改更新所有相关变量

错误处理

缺失变量

  • 未定义的变量渲染为空字符串
  • 模板引擎继续处理
  • 缺失变量不会抛出错误

无效模板

  • 语法错误导致回退到默认模板
  • 错误被记录但不会导致服务器崩溃
  • 模板编译被缓存以提高性能

模板渲染

注意: 1MCP 使用 noEscape: true 配置,因此所有变量默认未转义:

  • {{variable}} 输出原始内容(未转义)
  • 无需三重括号 - 所有内容按原样渲染
  • 非常适合 LLM 消费,XML 标签和标记应被保留
  • 不需要 XSS 保护,因为模板用于 LLM 指令目的,而不是网页显示

基于 Apache 2.0 许可发布