Вам понадобится Node 22.18 или новее (он запускает файлы TypeScript напрямую), Bun или Deno.
Создание проекта#
npx picomcp init my-server
cd my-server
npm installВы получите готовый к запуску сервер:
| Файл | Назначение |
|---|---|
server.ts | Описание сервера: инструменты, ресурсы, промпты |
main.ts | Запускает сервер через stdio |
server.test.ts | Тест, который вызывает инструмент прямо в процессе |
Хотите начать с нуля? Установите два пакета и напишите server.ts сами:
npm install picomcp zodПишем инструмент#
Откройте server.ts:
import { pico } from "picomcp";
import { z } from "zod";
export const server = pico({ name: "my-server", version: "0.1.0" })
.tool("greet", {
description: "Greets someone by name.",
input: z.object({ name: z.string().describe("Who to greet") }),
run: ({ name }) => `Hello, ${name}!`,
});descriptionмодель читает, чтобы решить, когда вызывать инструмент. Пишите её для модели.input— любая Standard Schema. Внутриrunполеnameимеет типstring.- Здесь
runвозвращает строку. Он может также возвращать объекты, блоки содержимого или выбрасывать ошибку: см. Инструменты.
Тестируем#
import assert from "node:assert/strict";
import { test } from "node:test";
import { server } from "./server.ts";
test("greet says hello", async () => {
const result = await server.call("greet", { name: "Ada" });
assert.deepEqual(result.content, [{ type: "text", text: "Hello, Ada!" }]);
});npm testserver.call проверяется системой типов: опечатка в имени инструмента или пропущенный аргумент не скомпилируются.
Подключаем#
Для Claude Code:
claude mcp add my-server -- node /absolute/path/to/my-server/main.tsТеперь попросите Claude кого-нибудь поприветствовать. Для Claude Desktop, Cursor, VS Code и других клиентов см. Подключение клиента.
Отладка#
MCP Inspector позволяет вызывать инструменты вручную и видеть сырые сообщения:
npx @modelcontextprotocol/inspector node main.ts