Спасибо за интерес к Telegram-MCP! Этот документ описывает процесс внесения изменений в проект.
git clone https://github.com/plagness/Telegram-MCP.git
cd Telegram-MCP# Создать .env из примера
cp .env.example .env
# Установить TELEGRAM_BOT_TOKEN в .env
# Получить токен можно у @BotFather в Telegramdocker compose -f compose.yml up -d --buildcurl http://127.0.0.1:8081/health
curl http://127.0.0.1:3335/healthTelegram-MCP/
├── api/ # FastAPI-сервис (Python)
│ └── app/
│ ├── routers/ # HTTP эндпоинты
│ ├── services/ # Бизнес-логика
│ └── models.py # Pydantic-модели
├── mcp/ # MCP-сервер (Node.js/TypeScript)
│ └── src/index.ts # MCP инструменты
├── sdk/ # Python SDK для клиентов
├── db/init/ # SQL миграции
├── scripts/ # Тестовые скрипты
└── docs/ # Документация
-
Создать ветку:
git checkout -b feature/название-фичи
-
Внести изменения:
- Если добавляете эндпоинт: создать/обновить роутер в
api/app/routers/ - Если добавляете бизнес-логику: создать/обновить сервис в
api/app/services/ - Если изменяете БД: создать миграцию в
db/init/ - Если добавляете MCP-инструмент: обновить
mcp/src/index.ts - Если расширяете SDK: обновить
sdk/telegram_api_client/client.py
- Если добавляете эндпоинт: создать/обновить роутер в
-
Соблюдать стиль кода:
- Python: имена переменных/функций на английском, docstrings/комментарии на русском
- TypeScript: имена на английском, описания инструментов на русском
- Документация: на русском языке
-
Тестирование:
# Создать тестовый скрипт в scripts/ export TEST_CHAT_ID=-100ваш_chat_id python scripts/test_название.py --chat-id $TEST_CHAT_ID
-
Обновить документацию:
- Добавить описание в
docs/api.md(для HTTP API) - Добавить описание в
docs/sdk.md(для SDK) - Добавить описание в
docs/mcp.md(для MCP) - Обновить
README.mdесли добавлена крупная фича
- Добавить описание в
-
Коммит:
git add . git commit -m "feat: описание изменения"
Используем Conventional Commits:
feat:— новая функциональностьfix:— исправление багаdocs:— изменения в документацииrefactor:— рефакторинг кодаtest:— добавление тестовchore:— обновление зависимостей, CI/CD
Примеры:
feat: добавить поддержку опросов (sendPoll)
fix: исправить обработку ошибок в telegram_client
docs: обновить примеры в README
refactor: вынести роутеры в отдельные файлы
-
Пуш в fork:
git push origin feature/название-фичи
-
Создать PR на GitHub с описанием:
- Что добавлено/исправлено
- Какие эндпоинты/методы затронуты
- Примеры использования
-
Проверка:
- CI/CD должен пройти успешно
- Код ревью от мейнтейнеров
- Все комментарии должны быть закрыты
# ✅ Хорошо
async def send_message(
chat_id: int | str,
text: str,
parse_mode: str | None = None,
) -> dict[str, Any]:
"""
Отправить текстовое сообщение в чат.
Args:
chat_id: ID чата
text: Текст сообщения
parse_mode: Режим парсинга (HTML, MarkdownV2)
Returns:
dict: Информация об отправленном сообщении
"""
...
# ❌ Плохо (нет docstring, непонятные имена)
async def sm(c, t, pm=None):
...// ✅ Хорошо
addTool({
name: "messages.send",
description: "Отправить текстовое сообщение в чат Telegram",
parameters: z.object({
chat_id: z.union([z.number(), z.string()]).describe("ID чата"),
text: z.string().describe("Текст сообщения"),
}),
});
// ❌ Плохо (описание на английском для русскоязычного проекта)
addTool({
name: "messages.send",
description: "Send text message to chat",
...
});-- ✅ Хорошо: имена таблиц/колонок на английском, комментарии на русском
CREATE TABLE polls (
id SERIAL PRIMARY KEY,
poll_id TEXT UNIQUE NOT NULL, -- Telegram poll_id
question TEXT NOT NULL, -- Вопрос опроса
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Индексы для часто используемых запросов
CREATE INDEX idx_polls_chat_id ON polls(chat_id);Проект использует формат версий: [год].[месяц].[версия]
2025.02.1— первый релиз февраля 20252025.02.2— второй релиз февраля 20252025.03.1— первый релиз марта 2025
При добавлении фичи обновите:
VERSION— инкремент последней цифрыCHANGELOG.md— описание изменений
- Создайте Issue
- Обсудите в Discussions
Спасибо за вклад! 🚀