@oliviersm199/smcp
v0.1.0
Published
Generate typed, version-controlled TypeScript SDKs from MCP servers with structured tool output.
Readme
@oliviersm199/smcp
Generate typed TypeScript SDKs from MCP servers that expose Structured Tools (outputSchema + structuredContent).
Install
npm install @oliviersm199/smcp zodGenerate
# stdio
npx @oliviersm199/smcp generate --name everything --stdio "npx -y @modelcontextprotocol/server-everything"
# remote (streamable HTTP; use --transport sse for legacy SSE)
npx @oliviersm199/smcp generate --name remote --url https://example.com/mcp --header "Authorization: Bearer $TOKEN"
# from MCP Config (mcp.json); --name is the mcpServers key
npx @oliviersm199/smcp generate --name github --config ./mcp.jsonWrites smcp/<name>/ (always overwritten). Tools without outputSchema are skipped; --strict fails instead.
Use
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
import { McpSdkSmcpClient } from "@oliviersm199/smcp/runtime";
import { echo } from "./smcp/everything/index.js";
const mcp = new Client({ name: "app", version: "1.0.0" });
await mcp.connect(new StdioClientTransport({ command: "npx", args: ["-y", "@modelcontextprotocol/server-everything"] }));
const client = new McpSdkSmcpClient(mcp);
const result = await echo(client, { message: "hello" });Inject any SmcpClient. Auth stays on your MCP client / config — smcp does not store credentials.
Limits
- Only Structured Tools are generated.
- Generated wrappers use
structuredContentonly; othercontentblocks are ignored. - JSON Schema conversion uses a library; unsupported features become
z.unknown()with a warning.
License
MIT
