npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

hyperterse

v2.5.0

Published

A declarative interface to connect your database to your AI agents

Readme


Hyperterse is an agentic server framework: one build ships agents (A2A), tools (MCP), prompts, resources, database adapters, auth, caching, and observability from a single process. You declare surfaces in config; the compiler validates and bundles them. Clients use MCP Streamable HTTP at /mcp for tools, prompts, and resources; A2A-style agent routes live at /agent/{name} when you define agents.

Where to start

The Quickstart walks through install, scaffold, and run, then optional MCP tool checks.

What Hyperterse is for

  • Running agents alongside MCP tools, prompts, and resources in one deployable service
  • Exposing database queries and custom logic as MCP tools with declarative config
  • Production Streamable HTTP for MCP and A2A routes for agents
  • TypeScript handlers and transforms where config alone is not enough

Core capabilities

  • Agents: declarative configs, tool-access policies, multi-provider models, per-agent A2A HTTP.
  • Filesystem discovery: one MCP tool per tool definition; prompts and resources follow the same discover-and-compile model (see Project structure).
  • Execution models: DB-backed tools (use + statement) or script-backed tools (handler).
  • Database adapters: PostgreSQL, MySQL, SQLite, MongoDB, Redis.
  • Per-tool auth: built-in allow_all and api_key, plus custom plugins.
  • In-memory caching: global defaults + per-tool overrides.
  • Observability: OpenTelemetry tracing/metrics + structured logging.

Quick Start

Install

curl -fsSL https://hyperterse.com/install | bash

Initialize

hyperterse init

Generated starter structure:

.
├── .hyperterse
├── .agents/
│   └── skills/
│       ├── hyperterse-docs/
│       │   └── SKILL.md
│       └── hyperterse-agents/
│           └── SKILL.md
└── app/
    └── tools/
        └── hello-world/
            ├── config.terse
            └── handler.ts

Start

hyperterse start

With live reload:

hyperterse start --watch

Verify health

curl http://localhost:8080/heartbeat

Expected response:

{ "success": true }

Optional: list MCP tools

curl -s -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/list",
    "id": 1
  }' | jq

By design, Hyperterse exposes two transport-layer tools:

  • search - discover project tools by natural language
  • execute - execute a project tool by name

Optional: discover project tools (search)

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
  }' | jq

Search hits include name, description, relevance_score, and inputs.

Execute a project tool

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
  }' | jq

Validate and build

hyperterse validate
hyperterse build -o dist
hyperterse serve dist/

Configuration model

Project layout

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

Root config (.hyperterse)

name: my-service
server:
  port: 8080
  log_level: 3
tools:
  search:
    limit: 10
  cache:
    enabled: true
    ttl: 60

Tool Examples

DB-backed tool

description: "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 }}"

Script-backed tool

description: "Get weather by city"
handler: "./handler.ts"
inputs:
  city:
    type: string
auth:
  plugin: allow_all

Supported input types:

  • string
  • int
  • float
  • boolean
  • datetime

Each tool must define exactly one execution mode:

  • use (adapter-backed), or
  • handler (script-backed)

Runtime model

MCP — Streamable HTTP at /mcp (JSON-RPC 2.0): tools, prompts, resources, completion, subscriptions. See MCP transport.

A2A — JSON-RPC per agent at /agent/{agentName} (agent card, messaging, tasks, streaming). See A2A transport and Agents.

Execution pipeline:

  1. Tool resolution
  2. Authentication
  3. Input transform (optional)
  4. Execution (DB or handler)
  5. Output transform (optional)
  6. Response serialization

MCP spec compliance

Hyperterse implements the Model Context Protocol (MCP) specification 2025-11-25.

Compliance status by component:

| Spec component | Status | | ----------------------------------------------------------------------------------------------------------------------------- | :----: | | Base protocol (JSON-RPC 2.0) | ✅ | | Lifecycle (initialize/initialized) | ✅ | | Tools (list, call, listChanged) | ✅ | | Resources (list, read, subscribe, updated) | ✅ | | Prompts (list, get, listChanged) | ✅ | | Completion (ref/prompt, ref/resource) | ✅ | | Pagination (cursor/nextCursor) | ⚠️ | | Tool result content types (image, audio, resource_link) | ⚠️ |

Text content for tool results is supported; image, audio, and resource links are optional. Pagination applies when tools, prompts, or resources exceed typical small-to-medium counts.

Security notes

  • 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 map

Contributing

  1. Fork the repo.
  2. Create a feature branch.
  3. Add or update tests.
  4. Run validation locally.
  5. Open a PR.

See CONTRIBUTING.md and CODE_OF_CONDUCT.md.