Syrin is a runtime intelligence system for MCP servers.
It helps developers see, validate, and reason about MCP execution before systems reach production.
Documentation: https://docs.syrin.dev
Building MCP servers today usually looks like this:
- Define tools and prompts
- Connect an LLM
- Run the server
- Hope execution behaves as expected
When things go wrong:
- Tools are called for unclear reasons
- Behaviour changes between runs
- Debugging relies on logs and guesswork
- Contract issues surface only after failures
Most problems are discovered after deployment.
npx @syrin/cli initnpm install -g @syrin/clinpm install @syrin/cliRequirements:
- Node.js ≥ 18
- npm ≥ 9
Syrin changes the workflow.
Instead of guessing how MCP behaves, you inspect and validate it explicitly.
Before:
Write tools → Connect LLM → Run server → Debug via logs
With Syrin:
Define tools
→ Analyse contracts
→ Validate protocol
→ Inspect behaviour interactively
→ Enable execution with confidence
Syrin does not replace MCP.
It makes MCP systems understandable and testable.
- Validates MCP protocol compliance
- Analyses tool contracts statically
- Lets you interact with MCP servers using real LLMs
- Shows which tools are proposed and why
- Prevents accidental execution by default
- Surfaces configuration and contract errors early
Syrin supports both local (project-specific) and global (user-wide) configurations. This allows you to:
- Use Syrin from any directory without initializing a project
- Share LLM API keys across multiple projects
- Set default agent names and LLM providers globally
# Set up global configuration
syrin config setup --global
# Set API keys in global .env
syrin config edit-env --global
# Use Syrin from any directory
syrin dev --exec --transport http --mcp-url http://localhost:8000/mcp# View global config
syrin config list --global
# Set global LLM provider
syrin config set openai.model "gpt-4-turbo" --global
# Set default provider
syrin config set-default claude --globalSee the Configuration Guide for more details.
LLMs rely entirely on tool contracts.
If contracts are vague or incomplete, behaviour becomes unreliable.
syrin analyse inspects:
- Tool definitions
- Parameter schemas
- Description clarity
- Implicit dependencies between tools
This catches issues before runtime.
syrin analyseThis is especially useful in CI:
syrin analyse --cisyrin dev provides a governed chat interface for MCP servers.
- Preview tool calls before execution
- Execute tools only when explicitly enabled
- Switch between LLM providers
- Inspect large tool outputs safely
syrin devEnable execution only when ready:
syrin dev --execv1.3.0 Feature: syrin test now validates tool contracts through sandboxed execution.
This acts as a "hard design gate" to ensure each tool is individually safe for agent-driven systems:
- Tool Unit Contracts: Define behavioral guarantees in
tools/<tool-name>.yamlfiles - Sandboxed Execution: Tools tested in isolated environments with resource limits
- Behavioral Observation: Detects side effects, non-determinism, output explosions, hidden dependencies
- Process Reuse: Optimized for performance (100+ tools in 1-3 minutes)
# Validate all tools
syrin test
# Test specific tool
syrin test --tool fetch_user
# Strict mode (warnings become errors)
syrin test --strict
# JSON output for CI
syrin test --jsonConnection Testing (legacy behavior):
syrin test --connectionBefore running anything, Syrin validates assumptions.
syrin doctor
syrin test --connection # Test MCP connection onlyThese commands ensure:
- Configuration is valid
- Environment variables are set
- MCP protocol is followed correctly
syrin init # Initialise configuration
syrin doctor # Validate setup
syrin analyse # Static analysis of tool contracts
syrin test # Validate tool contracts (sandboxed execution)
syrin test --connection # Test MCP protocol connection
syrin dev # Inspect behaviour interactivelyThis workflow is designed to catch issues before production.
| Command | Purpose |
|---|---|
syrin init |
Initialise a Syrin project |
syrin doctor |
Validate configuration and environment |
syrin analyse |
Static analysis of MCP tool contracts |
syrin test |
Validate tool contracts (sandboxed execution) |
syrin test --connection |
Test MCP protocol connection (legacy) |
syrin list |
Inspect tools, resources, and prompts |
syrin dev |
Interactive execution inspection |
Full documentation: https://docs.syrin.dev/commands
Define behavioral guarantees for your tools in tools/<tool-name>.yaml files:
version: 1
tool: fetch_user
contract:
input_schema: FetchUserRequest
output_schema: User
guarantees:
side_effects: none
max_output_size: 10kbSee Tool Contracts Documentation for details.
Syrin uses a single configuration file:
syrin.yamlThis file defines:
- Transport type (
stdioorhttp) - MCP server connection
- Allowed LLM providers
Configuration reference: https://docs.syrin.dev/configuration
- stdio – Syrin manages the MCP server process (recommended for development)
- http – Syrin connects to an existing server (common in production)
Transport documentation: https://docs.syrin.dev/configuration/transport
Supported providers:
- OpenAI
- Claude (Anthropic)
- Ollama (local models)
LLMs propose actions.
Syrin governs execution.
Provider configuration: https://docs.syrin.dev/configuration/llm
- Documentation: https://docs.syrin.dev
- GitHub: https://github.com/syrin-labs/cli
- Issues: https://github.com/syrin-labs/cli/issues
- npm: https://www.npmjs.com/package/@syrin/cli
ISC License. See LICENSE for details.
Made with ❤️ by Syrin Labs.
