Skip to content

Template Variables Reference

This page provides a complete reference for all variables available in custom instruction templates.

HTML Escaping Behavior

Important: 1MCP configures Handlebars with noEscape: true by default, which means all template variables output unescaped content. This is specifically designed for LLM instruction templates where HTML escaping would interfere with readability and AI parsing.

  • All variables are unescaped: Use regular {{variable}} syntax for all content
  • XML tags render cleanly: <server-name> outputs as <server-name> (not HTML entities)
  • No triple braces needed: {{instructions}} outputs raw content directly

Server State Variables

{{serverCount}}

  • Type: number
  • Description: Number of connected servers that have instructions (LEGACY - kept for backward compatibility)
  • Example: 3
  • Notes: Only counts servers with non-empty instructions. Use instructionalServerCount for new templates.

{{instructionalServerCount}}

  • Type: number
  • Description: Number of connected servers that have instructions (clearer name for serverCount)
  • Example: 3
  • Notes: Only counts servers with non-empty instructions

{{connectedServerCount}}

  • Type: number
  • Description: Total number of connected servers (including those without instructions)
  • Example: 5
  • Notes: Counts all connected servers regardless of whether they have instructions

{{hasServers}}

  • Type: boolean
  • Description: Whether any servers with instructions are connected
  • Example: true
  • Usage: Primary conditional for template logic (same as hasInstructionalServers)

{{hasInstructionalServers}}

  • Type: boolean
  • Description: Whether any servers with instructions are connected
  • Example: true
  • Usage: Primary conditional for displaying instruction-based content

{{serverList}}

  • Type: string
  • Description: Newline-separated list of server names (alphabetical order)
  • Example: "api-server\ndatabase-server\nweb-server"
  • Usage: For simple text lists

{{serverNames}}

  • Type: array<string>
  • Description: Array of server names for iteration
  • Example: ["api-server", "database-server", "web-server"]
  • Usage: With {{#each}} helper for custom formatting

{{servers}}

  • Type: array<ServerData>
  • Description: Array of server objects for detailed iteration and conditional logic
  • Structure:
    typescript
    interface ServerData {
      name: string; // Server name (e.g., "api-server")
      instructions: string; // Server instructions content
      hasInstructions: boolean; // Whether this server has instructions
    }
  • Usage: With {{#each}} for maximum template flexibility
  • Example:
text
{{#each servers}}
{{#if hasInstructions}}
### {{name}} Server
<{{name}}>
{{instructions}}
</{{name}}>
{{/if}}
{{/each}}

{{pluralServers}}

  • Type: string
  • Description: Grammatically correct singular/plural form based on instructional server count
  • Values: "server" (instructionalServerCount = 1) or "servers" (instructionalServerCount ≠ 1)
  • Example: "servers"

{{isAre}}

  • Type: string
  • Description: Grammatically correct verb form based on instructional server count
  • Values: "is" (instructionalServerCount = 1) or "are" (instructionalServerCount ≠ 1)
  • Example: "are"

{{connectedPluralServers}}

  • Type: string
  • Description: Grammatically correct singular/plural form based on total connected server count
  • Values: "server" (connectedServerCount = 1) or "servers" (connectedServerCount ≠ 1)
  • Example: "servers"

{{connectedIsAre}}

  • Type: string
  • Description: Grammatically correct verb form based on total connected server count
  • Values: "is" (connectedServerCount = 1) or "are" (connectedServerCount ≠ 1)
  • Example: "are"

Content Variables

{{instructions}}

  • Type: string (unescaped)

  • Description: All server instructions wrapped in XML-like tags

  • Format: <server-name>\nInstructions...\n</server-name>

  • Usage: Use regular {{instructions}} syntax (unescaped by default)

  • Example:

    xml
    <api-server>
    API server instructions for backend services
    </api-server>
    
    <web-server>
    Web server instructions for frontend development
    </web-server>

{{filterContext}}

  • Type: string
  • Description: Description of active filtering, or empty string if none
  • Examples:
    • "" (no filtering)
    • " (filtered by tags: backend, api)"
    • " (filtered by advanced expression)"
    • " (filtered by preset)"

Configuration Variables

{{title}}

  • Type: string
  • Description: Title for the instruction template
  • Default: "1MCP - Model Context Protocol Proxy"
  • Customizable: Can be overridden in configuration
  • Example: "My Custom MCP Gateway"

{{toolPattern}}

  • Type: string
  • Description: Tool naming pattern used by the proxy
  • Default: "{server}_1mcp_{tool}"
  • Customizable: Can be overridden in configuration
  • Example: "{server}::{tool}"

{{examples}}

  • Type: array<ToolExample>
  • Description: Array of tool examples for documentation
  • Structure:
    typescript
    interface ToolExample {
      name: string; // Tool name with pattern applied
      description: string; // What the tool does
    }

Default Examples

Tool NameDescription
filesystem_1mcp_read_fileRead files through filesystem server
web_1mcp_searchSearch the web through web server
database_1mcp_queryQuery databases through database server

Custom Examples

You can provide custom examples in configuration:

json
{
  "examples": [
    {
      "name": "custom_1mcp_analyze",
      "description": "Analyze data through custom server"
    },
    {
      "name": "monitor_1mcp_check",
      "description": "Check system health through monitoring server"
    }
  ]
}

Variable Usage Examples

Basic Substitution

text
Connected to {{connectedServerCount}} {{connectedPluralServers}}
With instructions: {{instructionalServerCount}} {{pluralServers}}

Output: Connected to 5 servers Output: With instructions: 3 servers

Conditional Content

text
{{#if hasServers}}
  {{instructionalServerCount}} {{pluralServers}} {{isAre}} providing instructions
  {{#if connectedServerCount}}
    ({{connectedServerCount}} total {{connectedPluralServers}} connected)
  {{/if}}
{{else}}
  No servers with instructions available
{{/if}}

Server Iteration (Simple)

text
{{#each serverNames}}
- Server: {{this}}
{{/each}}

Server Iteration (Detailed)

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

Tool Examples

text
Available tools:
{{#each examples}}
- `{{name}}`: {{description}}
{{/each}}

Complex Template

text
# {{title}}

## Status: {{#if hasServers}}✅ Connected{{else}}⏳ Waiting{{/if}}

{{#if hasServers}}
**{{connectedServerCount}} {{connectedPluralServers}} connected**{{filterContext}}

### Servers
{{#each serverNames}}
- 🔧 {{this}}
{{/each}}

{{#if hasInstructionalServers}}
### Instructions
{{instructions}}

### Example Tools
{{#each examples}}
- `{{name}}` - {{description}}
{{/each}}

*Tools use pattern: `{{toolPattern}}`*
{{else}}
*Servers connected but no instructions provided yet*
{{/if}}
{{else}}
Waiting for server connections...
{{/if}}

Variable Scope and Context

Filtering Impact

When filtering is active, variables reflect the filtered subset:

  • {{connectedServerCount}} = count of all filtered servers
  • {{instructionalServerCount}} = count of filtered servers with instructions
  • {{serverNames}} = names of filtered servers only
  • {{instructions}} = instructions from filtered servers only
  • {{filterContext}} = description of active filter

Alphabetical Ordering

Server-related variables maintain consistent alphabetical ordering:

  • {{serverList}} is alphabetically sorted
  • {{serverNames}} array is alphabetically sorted
  • {{instructions}} sections appear in alphabetical order

Real-time Updates

All variables reflect the current state:

  • Server connections/disconnections update counts
  • Instruction changes update content
  • Filter changes update all relevant variables

Error Handling

Missing Variables

  • Undefined variables render as empty strings
  • Template engine continues processing
  • No errors thrown for missing variables

Invalid Templates

  • Syntax errors cause fallback to default template
  • Errors are logged but don't crash the server
  • Template compilation is cached for performance

Template Rendering

Note: 1MCP uses noEscape: true configuration, so all variables are unescaped by default:

  • {{variable}} outputs raw content (unescaped)
  • No need for triple braces - all content renders as-is
  • Perfect for LLM consumption where XML tags and markup should be preserved
  • XSS protection is not needed since templates are for LLM instruction purposes, not web display

Released under the Apache 2.0 License.