Agent skill

Tsed MCP Server

by tsedio in tsedio/tsed

Expose Model Context Protocol (MCP) tools, resources and prompts from a Ts.ED v8 application with @tsed/platform-mcp, over the application's HTTP endpoint or as a standalone stdio / Streamable HTTP…

MITAuto-check passedAgent Workflows

Install Tsed MCP Server

skills CLI
$ npx skills add tsedio/tsed --skill tsed-mcp-server -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tsedio/tsed tsed-mcp-server --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tsedio/tsed.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/tsed/skills/tsed-mcp-server .claude/skills/tsed-mcp-server && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tsed-mcp-server
GitHub stars
3.1k
Token cost
~2.8k tokens
SKILL.md length
1,120 words
Files
5 (incl. references)
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Expose Model Context Protocol (MCP) tools, resources and prompts from a Ts.ED v8 application with @tsed/platform-mcp, over the application's HTTP endpoint or as a standalone stdio / Streamable HTTP…

  • Works in 9 steps: Install and mount the endpoint → Register every provider explicitly → Write a tool with decorators → …
  • Adding @tsed/platform-mcp
  • SKILL.md covers 1. Install and mount the…, 2. Register every provider…, 3. Write a tool with decorators and 4. Write a tool with the…, plus 8 more sections
  • Calls npm and npx; needs OAUTH_TOKEN

What it does

Tsed MCP Server is an agent skill from tsedio/tsed. Expose Model Context Protocol (MCP) tools, resources and prompts from a Ts.ED v8 application with @tsed/platform-mcp, over the application's HTTP endpoint or as a standalone stdio / Streamable HTTP server. Use when adding @tsed/platform-mcp, the mcp configuration, @Tool, @Resource, @Prompt, defineTool, defineResource, definePrompt or mcpServerConnect, when a tool is missing from tools/list, when a client receives EMCPTOOLERROR or another EMCP payload, or when registering the server in Claude Code (.mcp.json) or…

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `agents/openai.yaml`, `references/api.md` and `references/gateway-and-oauth.md`).

It sits in Agent Workflows, covering MCP servers. It works with Model Context Protocol. The repository describes itself as: :triangularruler: Ts.ED is a Node.js and TypeScript framework on top of Express to write your application with TypeScript (or ES6). It provides a lot of decorators and guideline… The licence is MIT.

When your agent uses it

  • Adding @tsed/platform-mcp
  • The mcp configuration
  • McpServerConnect
  • A tool is missing from tools/list

Example prompts

  • “/tsed-mcp-server”

Requirements

  • Node.js
  • A credential in OAUTH_TOKEN

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Install and mount the endpoint
  2. Register every provider explicitly
  3. Write a tool with decorators
  4. Write a tool with the functional API
  5. Handle errors
  6. Run a standalone server
  7. Test
  8. Register the server in a client
  9. Proxy a third-party MCP server and protect the endpoint

What it can do on your machine

Read from SKILL.md and the folder at commit cf95a4e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • tsed.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OAUTH_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tsed MCP Server loads about 2.8k tokens when it runs, and up to ~9.5k if it reads all its reference files. Until then it costs about 220 tokens; SKILL.md has 1,120 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~220
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~9.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from tsedio/tsed at commit cf95a4e, republished under its MIT licence (© tsedio). 1,120 words, ~2,791 tokens.

Download SKILL.mdSave it as .claude/skills/tsed-mcp-server/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
tsed-mcp-server
description
Expose Model Context Protocol (MCP) tools, resources and prompts from a Ts.ED v8 application with @tsed/platform-mcp, over the application's HTTP endpoint or as a standalone stdio / Streamable HTTP server. Use when adding @tsed/platform-mcp, the `mcp` configuration, @Tool, @Resource, @Prompt, defineTool, defineResource, definePrompt or mcpServerConnect, when a tool is missing from tools/list, when a client receives E_MCP_TOOL_ERROR or another E_MCP_* payload, or when registering the server in Claude Code (.mcp.json) or Codex (config.toml), when proxying a third-party MCP server with the `upstream` option (gateway over http, sse or stdio), or when protecting the endpoint with OAuth through the `auth` option (401 challenge, protected resource metadata, token introspection, ${OAUTH_TOKEN} forwarding). Not for the Ts.ED CLI's own MCP server (see tsed-cli).

Ts.ED MCP Server

@tsed/platform-mcp turns Ts.ED providers into MCP tools, resources and prompts. Handlers run inside the Ts.ED injector, so they reuse the application's services.

Read the API reference for option tables, resources, prompts and error payloads, and the standalone and clients reference for stdio servers and client registration, and the gateway and OAuth reference for proxying a third-party MCP server and protecting the endpoint. This skill is about the MCP server your application exposes; the MCP server shipped by the Ts.ED CLI belongs to the sibling skill tsed-cli.

1. Install and mount the endpoint

Run npm install @tsed/platform-mcp, then import it in Server.ts:

typescript
import "@tsed/platform-express";
import "@tsed/platform-mcp";
import {Configuration} from "@tsed/di";
import {OrderTools} from "./mcp/OrderTools.js";
import {docsResource} from "./mcp/docsResource.js";

@Configuration({
  mcp: {
    path: "/mcp",
    name: "orders",
    version: "1.0.0",
    tools: [OrderTools],
    resources: [docsResource]
  }
})
export class Server {}
  1. The side-effect import registers the module; without it no route is mounted.
  2. The module mounts POST <path> (default /mcp). The transport is stateless: a new MCP server is created per request.
  3. name and version fall back to the root name / version configuration, then to tsed-mcp / 0.0.0.
  4. Set enabled: false to skip an endpoint; use an array (mcp: [{name, path, tools}, ...]) to expose several independent servers.

2. Register every provider explicitly

A decorator or a define* call alone exposes nothing. List each decorated class and each define* token in the tools, resources or prompts array of every server that should expose it. A class contributes all of its decorated methods of that kind.

3. Write a tool with decorators

typescript
import {Injectable, inject} from "@tsed/di";
import {Tool} from "@tsed/platform-mcp";
import {Description, Property, Required, Returns} from "@tsed/schema";
import {OrdersService} from "../services/OrdersService.js";

class GetOrderInput {
  @Required()
  @Description("Order identifier")
  id: string;
}

class OrderResult {
  @Property()
  status: string;
}

@Injectable()
export class OrderTools {
  protected orders = inject(OrdersService);

  @Tool("get-order")
  @Description("Returns one order by id")
  @Returns(200, OrderResult)
  async getOrder(input: GetOrderInput) {
    return this.orders.get(input.id);
  }
}
  1. The input schema comes from the class type of the first parameter. Interfaces and inline object types produce no schema.
  2. The output schema comes from @Returns(200, Model). Omit it and no outputSchema is advertised.
  3. The description comes from @Description; the name from @Tool(name) or the method name. Pass title, annotations or explicit schemas as @Tool(name, {...}).
  4. Return a plain object or model: Ts.ED serializes it into both content (JSON text) and structuredContent. Return a full MCP result ({content: [...]}) only for custom content.
  5. Write model and parameter descriptions for an LLM reader: they are the tool's only documentation. Model decorators are covered by the sibling skill tsed-models.

4. Write a tool with the functional API

typescript
import {inject} from "@tsed/di";
import {defineTool} from "@tsed/platform-mcp";
import {s} from "@tsed/schema";
import {OrdersService} from "../services/OrdersService.js";

export const cancelOrderTool = defineTool({
  name: "cancel-order",
  description: "Cancels an order that is not shipped yet",
  inputSchema: s.object({id: s.string().required().description("Order identifier")}),
  outputSchema: s.object({status: s.string().required()}),
  async handler({id}) {
    return {status: await inject(OrdersService).cancel(id)};
  }
});
  • defineTool returns a DI token; add it to mcp.tools. Call inject() inside the handler, not at module top level.
  • Resources (@Resource / defineResource) and prompts (@Prompt / definePrompt) follow the same two styles; see the reference.

5. Handle errors

  • Handlers never throw to the transport. A thrown error is logged (MCP_TOOL_ERROR, MCP_RESOURCE_ERROR, MCP_PROMPT_ERROR) and converted to a payload.
  • A tool error returns isError: true with structuredContent: {status_code, code, message, tool}.
  • code is E_MCP_<KIND>_<ERROR_NAME> when the error has both name and status (any @tsed/exceptions class, e.g. NotFound gives E_MCP_TOOL_NOT_FOUND); otherwise E_MCP_<KIND>_ERROR.
  • Throw @tsed/exceptions errors (sibling skill tsed-exceptions) with messages safe to show to a model; the message is returned verbatim. Arguments that violate the input schema are rejected by the MCP SDK before the handler runs.

6. Run a standalone server

Use mcpServerConnect("stdio" | "streamable-http") from @tsed/platform-mcp/cli once the injector is loaded. It reads a single mcp configuration object (an array throws). Full scripts are in the reference.

  • With stdio, stdout belongs to the protocol. Never call console.log; send diagnostics to stderr. The helper stops the Ts.ED logger before connecting.
  • streamable-http serves POST /mcp on PORT (default 3000), ignores mcp.path, and needs express installed.

7. Test

Unit-test a tool through its token, inside PlatformTest.create() / PlatformTest.reset() (from @tsed/platform-http/testing):

typescript
const tool = inject<any>(cancelOrderTool);
const result = await tool.handler({id: "42"}, {} as any);

expect(result.structuredContent).toEqual({status: "cancelled"});

A failing handler resolves with result.isError === true; it does not reject. For an end-to-end check, bootstrap with PlatformTest.bootstrap(Server) and POST /mcp a JSON-RPC body with SuperTest (full example in the reference). Mocking services follows the sibling skill tsed-testing.

8. Register the server in a client

Add the HTTP endpoint ({"type": "http", "url": "http://localhost:8083/mcp"}) or the stdio command to .mcp.json under mcpServers for Claude Code, or to a [mcp_servers.<name>] table in Codex config.toml. Exact snippets are in the reference.

9. Proxy a third-party MCP server and protect the endpoint

Add upstream to an mcp entry to serve a third-party MCP server (Streamable HTTP, SSE, or a stdio process such as an npx server) through the Ts.ED endpoint, and auth to protect the entry with an OAuth authorization server. Forward the caller's token with the ${OAUTH_TOKEN} placeholder in the upstream headers, or args/env for stdio. Option tables and startup errors are in the reference.

typescript
mcp: [
  {
    path: "/mcp/directus",
    auth: {issuer: "https://auth.example.com", resource: "https://api.example.com/mcp/directus", requiredScopes: ["mcp:read"]},
    upstream: {type: "http", url: "https://directus.example.com/mcp", headers: {Authorization: "Bearer ${OAUTH_TOKEN}"}}
  }
];
Show full SKILL.md (421 more words)Show less

Do not

  • Do not expect @Tool, @Resource or @Prompt to auto-register; list the class in the mcp configuration.
  • Do not reuse a tool, resource or prompt name: the DI token is derived from the name (MCP:TOOL:<name>), so two definitions collide.
  • Do not write to stdout in a stdio server, including from child processes and third-party loggers.
  • Do not leave the HTTP endpoint unauthenticated: tools run with the application's privileges. Use the auth option (OAuth, or a custom check such as an API key with auth.preAuth) rather than a global middleware testing the path.
  • Do not write ${OAUTH_TOKEN} inside a template literal (backticks): it is a plain-string placeholder resolved per request, not a JavaScript interpolation.
  • Do not declare several upstreams in one mcp entry; use one entry per upstream.
  • Do not import from @tsed/common or from @modelcontextprotocol/sdk; the package uses @modelcontextprotocol/server and @modelcontextprotocol/node.

Pitfalls

  • Tool missing from tools/list: the class or token is not in mcp.tools of that server, @tsed/platform-mcp is not imported, or the class lacks @Injectable().
  • Empty input schema: the parameter type is an interface, or its properties have no @tsed/schema decorator.
  • A class-based @Prompt gets no arguments schema from its parameter; pass argsSchema in the decorator options.
  • Only POST <path> is served and the transport is stateless with JSON responses; GET and DELETE on the path answer 405 with Allow: POST. Clients that require sessions or a GET event stream are not served by the HTTP module.
  • 401 on every call in introspection mode: the authorization server does not return aud for the endpoint resource. Configure resource indicators on the authorization server, or set audience: false.
  • Offline mode rejects valid-looking JWTs: the token is not an RFC 9068 access token (typ: at+jwt with iss, exp, aud, sub, iat, jti, client_id). Use introspection or a custom verifier.
  • Upstream tools missing from tools/list: the upstream is unreachable (see the MCP_GATEWAY_UPSTREAM_ERROR log) or a local tool has the same name (MCP_GATEWAY_COLLISION).
  • In a standalone script, mcpServerConnect("stdio") fails with logger(...).stop is not a function unless a @tsed/logger instance is attached to the injector (attachLogger($log)).

Checklist

  • @tsed/platform-mcp is imported and every tool, resource and prompt is listed in mcp.
  • Each tool has a name, an LLM-readable description, a class or s.object input schema, and an output schema.
  • Handlers resolve services with inject() and throw @tsed/exceptions errors.
  • A test calls each tool handler, including one failing path.
  • The endpoint is protected, or bound to a trusted network.
  • stdio entry points print nothing on stdout; the client configuration was tried with npx @modelcontextprotocol/inspector.

Further reading: https://tsed.dev/docs/mcp.md.

© tsedio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (references) in plugins/tsed/skills/tsed-mcp-server of tsedio/tsed.

  • SKILL.md
  • agents/openai.yaml
  • references/api.md
  • references/gateway-and-oauth.md
  • references/standalone-and-clients.md

Open the folder on GitHubat commit cf95a4e

Compare with similar skills

Tsed MCP Server next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tsed MCP Server compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tsed MCP Server this skilltsedio/tsed3.1k—~2.8kAutomated safety check: PassMIT
MCP Server Builderanthropics/skills180k63 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k5 repos~1.2kAutomated safety check: PassMIT
MCP Integration for Pluginsanthropics/claude-plugins-official38k11 repos~3.1kAutomated safety check: PassApache-2.0
Crush Configurationcharmbracelet/crush29k—~3.7kAutomated safety check: PassCustom licence
Context Mode Output Sandboxmksglu/context-mode26k—~4.1kAutomated safety check: PassCustom licence

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 63 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    shareAI-lab/learn-claude-code

    Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.

    78k GitHub starsUsed in 5 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • MCP Integration for Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.

    38k GitHub starsUsed in 11 repos~3.1k tokens
    Agent WorkflowsAuto-check passed
  • Crush Configuration

    charmbracelet/crush

    Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.

    29k GitHub stars~3.7k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Context Mode Output Sandbox

    mksglu/context-mode

    Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.

    26k GitHub stars~4.1k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Migrates the compatible subset of settings and global file-based MCP servers from the Warp desktop app into Warp Agent CLI without exposing credentials or state.

    65k GitHub starsUsed in 1 repo~2.1k tokens
    Agent WorkflowsAuto-check passed

More from tsedio/tsed

All 19 skills in this repo
  • Create a production-ready Ts.ED platform adapter for a new HTTP framework or runtime, such as Hono, Elysia, Bun.serve, or a Node framework.

    3.1k GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed
  • Tsed CLI

    tsedio/tsed

    Scaffolds Ts.ED v8 projects and generates files with the Ts.ED CLI v7, through its MCP server (tools set-workspace, init-project, list-templates, get-template, generate-file) or the tsed binary…

    3.1k GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed
  • Configure and bootstrap a Ts.ED v8 server - the @Configuration decorator or configuration() on the Server class, PlatformExpress/PlatformKoa/PlatformFastify.bootstrap, server options (mount…

    3.1k GitHub stars~2.1k tokensUpdated yesterday
    Auto-check: notes
  • Tsed Di

    tsedio/tsed

    Declare, inject and scope Ts.ED v8 providers and wire lifecycle hooks - @Injectable, @Module, @Controller, @Inject, the functional API (inject, injectMany, lazyInject, constant, refValue…

    3.1k GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Tsed Docs

    tsedio/tsed

    Locates authoritative Ts.ED v8 documentation and API reference instead of guessing framework APIs.

    3.1k GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed
  • Tsed Logger

    tsedio/tsed

    Configure and use logging in a Ts.ED v8 application with @tsed/logger v8.

    3.1k GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Tsed MCP Server

What does Tsed MCP Server do?

Expose Model Context Protocol (MCP) tools, resources and prompts from a Ts.ED v8 application with @tsed/platform-mcp, over the application's HTTP endpoint or as a standalone stdio / Streamable HTTP…. Tsed MCP Server is an agent skill from tsedio/tsed.ED v8 application with @tsed/platform-mcp, over the application's HTTP endpoint or as a standalone stdio / Streamable HTTP server.

When should I use Tsed MCP Server?

Tsed MCP Server fits situations like: adding @tsed/platform-mcp; the mcp configuration; mcpServerConnect; A tool is missing from tools/list.

How do I install Tsed MCP Server in Claude Code?

Run `npx skills add tsedio/tsed --skill tsed-mcp-server -a claude-code`. Or copy the skill folder (plugins/tsed/skills/tsed-mcp-server in tsedio/tsed) into .claude/skills/tsed-mcp-server in your project. Claude Code loads it when a task matches its description.

How do I install Tsed MCP Server in Codex?

Run `npx skills add tsedio/tsed --skill tsed-mcp-server -a codex`. Or copy the skill folder (plugins/tsed/skills/tsed-mcp-server in tsedio/tsed) into .agents/skills/tsed-mcp-server in your project. Codex loads it when a task matches its description.

Can I use Tsed MCP Server in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tsedio/tsed --skill tsed-mcp-server -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tsed-mcp-server, .gemini/skills/tsed-mcp-server, .github/skills/tsed-mcp-server and .opencode/skills/tsed-mcp-server in your project.

What does Tsed MCP Server need to run?

Going by SKILL.md and its folder, Tsed MCP Server needs the command-line tools its instructions call (npm and npx) and credentials named OAUTH_TOKEN. Our summary lists: Node.js; A credential in OAUTH_TOKEN.

Does Tsed MCP Server access the network?

SKILL.md names 1 domain. As links in the text: tsed.dev. This is read from the text; nothing was executed.

Is Tsed MCP Server safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Tsed MCP Server use?

Tsed MCP Server is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tsed MCP Server use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.7k tokens, read only when the agent opens those files.

What are the alternatives to Tsed MCP Server?

Skills that share tags, products or a category with Tsed MCP Server: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and Crush Configuration (charmbracelet/crush, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tsed MCP Server?

tsedio (a GitHub organization) maintains it in tsedio/tsed, which has 3,088 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 8, 2026.

Source: tsedio/tsed on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.