Чтобы создать сервер MCP для Claude Code, начните с одного небольшого инструмента. Задайте ему понятный вход, безвредный выход и исключите скрытый доступ к сети или файловой системе. Model Context Protocol позволяет Claude Code обнаружить этот инструмент и попросить локальный сервер запустить его. OdiRouter настраивается как поставщик модели, а не встраивается в инструмент.
В этом руководстве используется сервер Node.js stdio, чтобы первый тест выполнялся на вашем компьютере. Позже вы сможете изменить пример инструмента. Придерживайтесь той же дисциплины: проверяйте запросы, ограничивайте полномочия каждого инструмента и не храните секреты в репозитории.
Разделите сервер, клиент и поставщика
Сервер MCP публикует инструменты. Claude Code — это клиент, который может вызывать их в рамках сессии. OdiRouter предоставляет документированную конфигурацию, совместимую с Anthropic, для Claude Code. Эти границы делают отладку менее запутанной: сбой локального инструмента не обязательно означает сбой конфигурации поставщика.
Начните с задачи только для чтения. Пример возвращает краткое сообщение о состоянии. Он не читает репозиторий, не обращается к базе данных и не выполняет команду оболочки.
Создайте локальный проект
Создайте каталог, инициализируйте пакет Node.js и установите SDK с зависимостью от его схемы:
mkdir project-status-mcp
cd project-status-mcp
npm init -y
npm install @modelcontextprotocol/sdk zodСоздайте server.mjs с помощью одного инструмента:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "project-status",
version: "0.1.0"
});
server.registerTool(
"get_project_status",
{
description: "Return a short status message for a named project.",
inputSchema: {
project: z.string().min(1)
}
},
async ({ project }) => ({
content: [
{
type: "text",
text: `Status check for ${project}: ready for a local test.`
}
]
})
);
const transport = new StdioServerTransport();
await server.connect(transport);Схема — это реальная проверка безопасности, а не просто формальность. Программа отклоняет пустое название проекта и сообщает клиенту, чего ожидает инструмент. При подключении к реальной системе проверяйте каждый аргумент и внутри обработчика. Если аргумент неверен, возвращайте полезную ошибку вместо попытки угадать намерение.
Зарегистрируйте сервер с Claude Code
Создайте в проекте, где вы используете Claude Code, файл .mcp.json. Укажите в качестве команды абсолютный путь к server.mjs на вашем компьютере:
{
"mcpServers": {
"project-status": {
"command": "node",
"args": ["/absolute/path/to/project-status-mcp/server.mjs"]
}
}
}После сохранения файла перезапустите Claude Code. Затем попросите его использовать get_project_status с тестовым названием проекта. Для первой проверки убедитесь, что есть видимый запрос, предсказуемый текстовый ответ и отсутствуют побочные эффекты. Если Claude Code не обнаруживает инструмент, проверьте абсолютный путь и запустите node /absolute/path/to/project-status-mcp/server.mjs в терминале, чтобы выявить ошибки импорта, синтаксиса или зависимостей.
Настройте Claude Code для OdiRouter
В официальном руководстве Claude Code для OdiRouter описан базовый URL, совместимый с Anthropic. Храните ключ вне репозитория и задайте документированные переменные в профиле оболочки или другой среде, учитывающей секреты:
export ODIROUTER_API_KEY="YOUR_API_KEY"
export ANTHROPIC_BASE_URL="https://api.odirouter.ai"
export ANTHROPIC_AUTH_TOKEN="$ODIROUTER_API_KEY"
export ANTHROPIC_API_KEY=""Пустое значение ANTHROPIC_API_KEY намеренно предусмотрено в документированной конфигурации. Это предотвращает приоритет устаревших учётных данных Anthropic. Не помещайте настоящий ключ в .mcp.json, .claude/settings.local.json, файл .env или пример. Для общего репозитория используйте хранилище секретов на уровне пользователя или менеджер окружения.
Прежде чем выбирать модель или исследовать ошибку провайдера, проверьте текущий OdiRouter Claude Code integration documentation. Эта документация является источником достоверной информации при внесении изменений в конфигурацию.
Протестируйте минимально полезный сценарий
Проводите тестирование в следующем порядке:
Запустите локальный сервер и убедитесь, что Node.js не сообщает об ошибках импорта или синтаксиса.
Перезапустите Claude Code и убедитесь, что в его конфигурации MCP указан сервер.
Вызовите
get_project_statusс простым тестовым именем.Убедитесь, что ответ содержит только ожидаемый текст и не затрагивает файлы, не выполняет команды и не отправляет сетевые запросы.
Настройте OdiRouter отдельно и используйте текущую документацию для проверки доступа провайдера.
Этот порядок позволяет отделить локальную проблему MCP от проблемы конфигурации Claude Code. Меняйте по одному параметру за раз. Оставляйте тестовый инструмент доступным только для чтения, пока не проверите полный путь запроса и ответа.
Осторожно добавляйте реальные возможности
Полезным инструментам MCP часто требуются данные или внешний сервис. Добавляйте такой доступ небольшими шагами. Назначьте каждому инструменту одну узкую задачу, проверяйте его входные данные, ограничьте его только необходимыми учётными данными и данными и требуйте явного подтверждения, прежде чем он будет записывать, удалять, развёртывать или отправлять что-либо.
Не передавайте произвольный текст оболочки средству выполнения команд. Не предоставляйте широкий интерфейс запросов к базе данных, если достаточно фиксированного запроса только для чтения. Рассматривайте каждый ответ инструмента как недоверенный ввод для модели. Никогда не возвращайте секреты, токены доступа или закрытые исходные материалы.
Следующий шаг
После того как локальный инструмент станет работать предсказуемо, замените его пример ответа одной одобренной интеграцией только для чтения. Сохраните это разграничение в коде, затем следуйте официальному OdiRouter Claude Code setup guide для конфигурации провайдера, используемой Claude Code.