
Mcp Ts Core
io.github.cyanheadsPublished by GitHub account cyanheadsv0.13.21Updated Nov 7, 2026
Agent-native TypeScript framework for building MCP servers.
The publisher's own server: core.blue
Overview
TypeScript framework for building MCP servers, with typed tool, resource and prompt builders plus auth, storage, transports and testing.
- What you can do
- Scaffold a new MCP server project with build, test and agent configuration
- Define tools, resources, prompts and MCP Apps with typed schemas and handlers
- Add JWT or OAuth scopes, tenant-scoped storage and structured logging
- Serve over stdio, HTTP on Bun or Node.js, or Cloudflare Workers
- Test definitions with mock contexts, contract suites, fuzzing and a headless app renderer
- Optionally query staged data with DuckDB or mirror bulk datasets into local SQLite
- When to use it
- Use it when you are writing your own MCP server in TypeScript and want the protocol plumbing, auth, storage, logging and test harness handled for you, rather than assembling them from the base SDK.
- Requirements
- Runs as a local npm package started with npx or bunx; servers built on it run on Bun, Node.js 24+ or Cloudflare Workers. Configuration is by environment variables such as MCP_TRANSPORT_TYPE, MCP_HTTP_PORT, MCP_AUTH_MODE and STORAGE_PROVIDER_TYPE. Optional integrations (DuckDB, Supabase, OpenTelemetry, headless Chrome for app rendering) are separate peer dependencies.
Installation
In SourceWeft
- Open Mcp Ts Core in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@cyanheads/mcp-ts-core
Agent-native TypeScript framework for building MCP servers.
Runtime infrastructure for your server, and the agent skills to build, test, and ship it.
Build AI tools for anything you can describe
Connect an API, a dataset, or a workflow to an AI agent through the Model Context Protocol (MCP). Your project holds the domain code; @cyanheads/mcp-ts-core handles the auth, storage, logging, and transports underneath it.
Agent-native. Every scaffold ships the framework reference and a set of Agent Skills: workflows for designing tools, writing tests, reviewing security, and cutting releases. You decide what the server does; your agent follows the skills to build it.
The framework stays a dependency. Infrastructure fixes arrive as package upgrades. Run the maintenance skill and your agent bumps core, syncs the latest skills, and adopts what changed.
Quick start
Servers run on Bun, Node.js 24+, or Cloudflare Workers.
The scaffold includes a source tree, build and test configuration, CLAUDE.md/AGENTS.md, Agent Skills, and plugin metadata for Claude Code and Codex. Open it in Claude Code, Codex, or another agent and describe what you want:
Build an MCP server for my team's inventory API. We need to find products, check stock across warehouses, investigate stock movements, and record adjustments and transfers. Let's get started.
Already have a TypeScript project? Run bun add @cyanheads/mcp-ts-core and register your definitions with createApp().
A tool is a schema and a function
This is a complete server that searches a three-item catalog. To try it, replace the scaffold's src/index.ts with it:
Build and run it over HTTP:
Point your MCP client at http://127.0.0.1:3010/mcp (Streamable HTTP), or have the client launch it over stdio with bun /absolute/path/to/dist/index.js.
What comes with it
Optional integrations (DuckDB, Supabase, the OpenTelemetry SDK) are peer dependencies; install them when you need them.
Give agents useful results
Two declared contracts shape what an agent gets back. enrichment carries success-path context (totals, the parsed query, empty-result notices), populated with ctx.enrich(). errors lists each expected failure with its recovery guidance, and the handler throws one with the typed ctx.fail().
runSearch(query, limit) stands in for your search backend. It returns { items, total, parsed }, or null when the index is down:
Both contracts are advertised in tools/list, so clients see them before calling, and the definition linter checks the handler against them. A failure with a declared reason reaches the client carrying that entry's recovery hint, and every tool error carries the request ID its server log records share.
Same data across client surfaces
MCP hosts differ in which part of a tool result they hand the agent: structuredContent (JSON), content[] (text), or both. The framework fills both with the same data, so the agent sees the same result on any host.
format() renders the text side; without one, content[] gets JSON. The format-parity lint rule fails lint:mcp if any output field is missing from the rendered text. Enrichment needs no format() entry, because the framework adds it to both surfaces. This formatter renders the items as a markdown list:
Resources
Resources expose data at a URI. This one reads from your own getItem() service:
Everything registers through createApp() in your entry point:
On Cloudflare Workers, createWorkerHandler() takes the same definitions from a separate entry point.
Runtime and integration details
- Auth and storage: Declare
auth: ['scope']on a definition and the scope is checked, under JWT or OAuth, before the handler runs.ctx.stateis tenant-scoped storage over in-memory, filesystem, Supabase, or Cloudflare D1/KV/R2, chosen by config. - Client interaction: Return
ctx.requestInput(...)to ask the user for input, the client's model for a sample, or the client for its roots. The handler runs again with the answers onctx.inputs. - Protocol compatibility: HTTP serves 2026-07-28 clients (per-request
_metaenvelope) and session-based 2025-era clients. The SDK's compatibility layer handles input requests for the older ones. - Server presentation:
instructionsgives the model server-wide guidance once, atinitialize, instead of in every tool description. Identity fields (title,websiteUrl,description,icons) populate the client's server info, the/.well-known/mcp.jsonserver card, and the HTTP landing page.skills: 'skills'serves the Agent Skills the server publishes in rootskills/through the SEP-2640 Skills extension (skills/list,skills/get), checked at build time bylint:packaging. - Definition checks:
lint:mcpchecks names, schemas, scopes, annotations, format parity, and JSON Schema portability. It runs at build time, never at startup, so a new rule can't break a deployed server. - DataCanvas: An optional DuckDB workspace where agents run SQL across staged API results and export CSV, Parquet, or JSON. Agents share a workspace by passing its canvas token. Enable it with
CANVAS_PROVIDER_TYPE=duckdband@duckdb/node-api(Bun or Node.js only). brapi-mcp-server walks through loading API results into a dataframe and querying it. - Mirror: The
/mirrormodule keeps a persistent local copy of a bulk upstream dataset in embedded SQLite with an optional FTS5 index, so tools query it locally instead of paging the live API on every call. You write thesyncingester and the schema; the framework handles storage, resumable initial loads, and incremental refreshes. Bun or Node.js only (better-sqlite3is an optional peer on Node). faa-aircraft-registry-mcp-server serves the full FAA registry this way.
See the framework reference for configuration and handler patterns, and the observability guide for Pino logging and OpenTelemetry traces and metrics.
Server structure
Framework infrastructure lives in node_modules; your source tree holds the server's definitions, configuration, and domain services.
Configuration
Core config comes from environment variables, validated with Zod. Server-specific variables get their own schema, parsed lazily so Workers can inject env at request time.
See CLAUDE.md/AGENTS.md for the full configuration reference.
API overview
Entry points
Builders
Context
Tool and resource handlers receive a Context. ctx.enrich and ctx.fail are typed against the definition's declared contracts:
Subpath exports
See CLAUDE.md/AGENTS.md for the complete exports reference.
Examples
examples/ holds a reference server built only on the public exports. examples/index.ts (Node/Bun) and examples/worker.ts (Cloudflare Workers) register the same definitions/index.ts barrels.
Testing
createMockContext() gives you a recording log, a signal, and a state backed by a real StorageService over an in-memory provider, so key validation, TTL expiry, and the JSON round-trip of stored values behave as they do in production: a Date reads back as its ISO string, and a value JSON cannot encode rejects. It uses tenant 'default' unless you pass { tenantId }. Pass { errors: myTool.errors } for a typed ctx.fail, { inputResponses, requestState } to start a multi-round-trip handler at its second round, or { clientCapabilities } to set what the client declared (seeded responses are then filtered to the declared kinds, as in production).
/testing also exports createMockSession() for session-bound contexts, createFetchMock() as a strict fake for upstream HTTP, and runToolContract(), which runs a definition through schema, handler, formatting, and error-envelope checks. /testing/vitest adds the mcpTest fixtures (ctx, session, fetchMock, storage) and toolContractSuite().
/testing/fuzz uses fast-check to generate valid inputs from your Zod schemas plus adversarial payloads, then checks for crashes, stack-trace leaks, and prototype pollution:
It also exports fuzzResource, fuzzPrompt, zodToArbitrary, and ADVERSARIAL_STRINGS for custom property-based tests.
/testing/apps is a headless MCP Apps host. renderAppTool connects to your server as an MCP Apps client, calls an app tool, loads its ui:// view into chrome-headless-shell inside the sandbox and CSP the MCP Apps spec prescribes, runs scripted steps against the view, and returns a report:
The report also carries every message between the view and the host, the view's rendered text, and the screenshot paths. The same run from the command line, writing report.json and the screenshots under --out:
It needs the optional peers @modelcontextprotocol/client and @modelcontextprotocol/ext-apps, and a chrome-headless-shell build: the newest one in Puppeteer's cache (npx @puppeteer/browsers install chrome-headless-shell@stable --path ~/.cache/puppeteer), or an explicit executable path through browserPath, --browser, or MCP_APPS_BROWSER_PATH. Installed Chrome, Edge, Brave, and Chromium are never searched for.
Documentation
- CLAUDE.md/AGENTS.md: the framework reference, covering exports, patterns,
Context, error codes, auth, config, and testing. It ships in the npm package, so your agent reads it fromnode_modulesafterinit. - docs/telemetry/: every span, metric, and attribute the framework emits (observability.md), plus an example Grafana dashboard and query recipes for Datadog, New Relic, and Honeycomb (dashboards.md).
- CHANGELOG.md: version history, indexing one file per release under
changelog/. Each has a summary, migration notes, and links to commits and issues; releases that need downstream changes carryagent-notesfor themaintenanceskill to act on.
Development
License
Apache 2.0 — see LICENSE.
Source: README.md at commit 50f9b21
Tools
0Version history
18- v0.13.21LatestNov 7, 2026
- v0.13.19Nov 6, 2026
- v0.13.18Oct 26, 2026
- v0.13.16Oct 25, 2026
- v0.13.15Oct 12, 2026
- v0.13.14Oct 8, 2026
- v0.13.13Oct 7, 2026
- v0.13.12Oct 5, 2026
- v0.13.11Oct 4, 2026
- v0.13.10Sep 27, 2026
- v0.13.9Sep 27, 2026
- v0.13.8Sep 26, 2026
- v0.13.7Sep 25, 2026
- v0.13.6Sep 19, 2026
- v0.13.5Sep 19, 2026
- v0.13.4Sep 18, 2026
- v0.13.3Sep 17, 2026
- v0.13.2Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Core integrations
core.blue
blue.coreOfficial publisher
Remote MCP endpoint for core.blue's private per-customer agent memory "houses": read its manual, try a sandbox, get pricing and recommendations, and request a…

Brevio Core
Published by GitHub account Brevio-Ventures
Local code-rule scanner for coding agents: scan diffs or files, explain rules, apply safe fixes, and turn a fix into a guard, with no model call.

brain-core
Published by GitHub account xy-claude
Local MCP server that gives a Claude Code agent persistent memory across sessions, stored as markdown files plus a SQLite and vector index on your disk.

Scovant Core
Published by GitHub account Scovant
Passive AI-agent readiness scan of a website: robots, llms.txt, JSON-LD, MCP discovery, security.

ProofCore
Published by GitHub account ProofCore-Protocol
Zero-Auth Cryptographic Notarization & Evidence Layer on TON Blockchain for AI Agents.