The declarative framework for performant MCP servers.
Website
•
Documentation
•
Quick Start
•
Examples
•
GitHub
Hyperterse is a tool-first MCP framework for building AI-ready backend surfaces from declarative config.
You define tools and adapters in the filesystem, and Hyperterse handles compile-time validation, script bundling, runtime execution, auth, caching, and observability.
- Exposing database queries and custom logic as MCP tools
- Running a production MCP server over Streamable HTTP
- Keeping tool definitions declarative while still supporting TypeScript handlers/transforms
- Filesystem discovery: each
app/tools/*/config.tersebecomes one project tool. - Execution models: DB-backed tools (
use+statement) or script-backed tools (handler). - Database adapters: PostgreSQL, MySQL, MongoDB, Redis.
- Per-tool auth: built-in
allow_allandapi_key, plus custom plugins. - In-memory caching: global defaults + per-tool overrides.
- Observability: OpenTelemetry tracing/metrics + structured logging.
curl -fsSL https://hyperterse.com/install | bashhyperterse initGenerated starter structure:
.
├── .hyperterse
├── .agent/
│ └── skills/
│ └── hyperterse-docs/
│ └── SKILL.md
└── app/
└── tools/
└── hello-world/
├── config.terse
└── handler.ts
hyperterse startWith live reload:
hyperterse start --watchcurl http://localhost:8080/heartbeatExpected response:
{ "success": true }curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}' | jqBy design, Hyperterse exposes two transport-layer tools:
search- discover project tools by natural languageexecute- execute a project tool by name
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "hello world greeting"
}
},
"id": 2
}' | jqSearch hits include name, description, relevance_score, and inputs.
curl -s -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "execute",
"arguments": {
"tool": "hello-world",
"inputs": { "name": "Hyperterse" }
}
},
"id": 3
}' | jqhyperterse validate
hyperterse build -o dist
hyperterse serve dist/my-project/
├── .hyperterse
├── app/
│ ├── adapters/
│ │ └── primary-db.terse
│ └── tools/
│ ├── get-user/
│ │ ├── config.terse
│ │ ├── input.ts
│ │ └── output.ts
│ └── get-weather/
│ ├── config.terse
│ └── handler.ts
└── package.json
name: my-service
server:
port: 8080
log_level: 3
tools:
search:
limit: 10
cache:
enabled: true
ttl: 60description: "Get user by ID"
use: primary-db
statement: |
SELECT id, name, email
FROM users
WHERE id = {{ inputs.user_id }}
inputs:
user_id:
type: int
auth:
plugin: api_key
policy:
value: "{{ env.API_KEY }}"description: "Get weather by city"
handler: "./handler.ts"
inputs:
city:
type: string
auth:
plugin: allow_allSupported input types:
stringintfloatbooleandatetime
Each tool must define exactly one execution mode:
use(adapter-backed), orhandler(script-backed)
All tool interaction happens through MCP Streamable HTTP at /mcp (JSON-RPC 2.0).
Execution pipeline:
- Tool resolution
- Authentication
- Input transform (optional)
- Execution (DB or handler)
- Output transform (optional)
- Response serialization
- Use
{{ env.VAR_NAME }}for secrets and connection strings. {{ inputs.field }}statement substitution is textual; enforce strict input schemas and safe query patterns.- Configure tool-level auth explicitly for production use.
- Documentation index (
llms.txt) - Introduction
- Quickstart
- Project structure
- Tools
- Adapters
- Scripts
- MCP transport
- Execution pipeline
- CLI reference
- Configuration schemas
- Fork the repo.
- Create a feature branch.
- Add or update tests.
- Run validation locally.
- Open a PR.
See CONTRIBUTING.md and CODE_OF_CONDUCT.md.
The declarative framework for performant MCP servers.
Website
•
GitHub
•
Documentation