Telegram mtproto api
Use this skill when creating or refactoring a backend-only Node.js/Express API that connects to Telegram directly using MTProto as a user client. It must implement Telegram phone login, optional 2FA password flow, local development session storage, minimal chat endpoints, and Swagger/OpenAPI documentation. Do not use Telegraf, Telegram Bot API, frontend code, BullMQ, Redis, PostgreSQL, or background workers unless the user explicitly asks for them.From its SKILL.md
npx -y skills add JavoxirJava/telegram-mtproto-apiAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.6 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
Telegram MTProto API Skill
This skill builds a backend-only Node.js/Express API for Telegram MTProto user-client access.
The default target is a minimal but clean backend that can:
- log in to Telegram using MTProto
- send login code to a phone number
- verify Telegram login code
- handle optional Telegram 2FA password
- save Telegram session locally for development
- return current Telegram user profile
- list chats/dialogs
- read messages from a chat
- send a text message to a chat
- expose Swagger/OpenAPI documentation for all REST endpoints
Hard scope
Always follow these constraints unless the user explicitly asks otherwise:
- Backend only.
- Use Node.js and Express.
- Use the
telegramnpm package / GramJS MTProto client. - Use Telegram MTProto as a user client.
- Do not use Telegraf.
- Do not use Telegram Bot API.
- Do not generate frontend code.
- Do not add BullMQ.
- Do not add Redis.
- Do not add PostgreSQL.
- Do not add background workers.
- Do not build large sync systems in the first version.
- Do not place MTProto logic inside Express controllers.
- Do not expose Telegram
api_hashto frontend/client apps. - Do not expose Telegram session strings to frontend/client apps.
Recommended default dependencies
Use these dependencies unless the existing project already uses alternatives:
{
"express": "^4.18.0",
"cors": "^2.8.5",
"helmet": "^7.0.0",
"dotenv": "^16.0.0",
"joi": "^17.0.0",
"jsonwebtoken": "^9.0.0",
"morgan": "^1.10.0",
"telegram": "^2.26.0",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.1"
}
Development:
{
"nodemon": "^3.0.0"
}
Required project structure
When creating a new project, prefer this structure:
src/
app.js
server.js
config/
env.js
swagger.js
telegram.js
routes/
auth.routes.js
chat.routes.js
docs.routes.js
controllers/
auth.controller.js
chat.controller.js
services/
auth.service.js
chat.service.js
session.service.js
telegramClient.service.js
mtproto/
clientFactory.js
authFlow.js
chats.js
messages.js
middlewares/
auth.middleware.js
validate.middleware.js
error.middleware.js
validators/
auth.validator.js
chat.validator.js
utils/
AppError.js
asyncHandler.js
logger.js
docs/
get-telegram-api-keys.md
auth-flow.md
api-contract.md
swagger.md
security-notes.md
.env.example
README.md
package.json
Required REST API
Auth
POST /api/auth/send-codePOST /api/auth/verify-codePOST /api/auth/verify-passwordPOST /api/auth/logoutGET /api/auth/status
Telegram chat
GET /api/meGET /api/chatsGET /api/chats/:chatId/messagesPOST /api/chats/:chatId/messages
API documentation
GET /api/docsGET /api/docs.json
Swagger UI should be available at /api/docs.
OpenAPI JSON should be available at /api/docs.json.
Required documentation
When creating a project with this skill, always generate:
README.md.env.exampledocs/get-telegram-api-keys.mddocs/auth-flow.mddocs/api-contract.mddocs/swagger.mddocs/security-notes.md
Documentation must explain:
- This backend uses Telegram MTProto, not Telegram Bot API.
- The user must create Telegram API credentials from
my.telegram.org. - Required credentials are
TELEGRAM_API_IDandTELEGRAM_API_HASH. - Credentials must be stored only in
.env. - Frontend/client apps must never receive
TELEGRAM_API_HASH. - Frontend/client apps must never receive Telegram session strings.
- Basic login flow:
- send code
- verify code
- verify 2FA password if required
- use backend JWT for later API calls
- Swagger UI is available at
/api/docs. - OpenAPI JSON is available at
/api/docs.json.
Environment variables
Always create .env.example with at least:
PORT=5000
NODE_ENV=development
TELEGRAM_API_ID=123456
TELEGRAM_API_HASH=your_api_hash_here
JWT_SECRET=change_this_to_a_long_random_secret
JWT_EXPIRES_IN=7d
SESSION_STORAGE=file
SESSION_DIR=.sessions
CORS_ORIGIN=http://localhost:5173
LOG_LEVEL=info
Architecture rules
Controllers must:
- parse request data
- call services
- return HTTP responses
- not contain MTProto implementation details
Services must:
- contain business logic
- call MTProto modules
- normalize Telegram responses for API output
MTProto modules must:
- directly interact with the
telegrampackage - hide GramJS-specific details from controllers
- return clean objects where possible
Session service must:
- save and load Telegram session strings
- support local file storage for development
- be replaceable later with encrypted database storage
- never send raw session strings to API clients
Swagger/OpenAPI must:
- document every public REST endpoint
- document request body schemas
- document success responses
- document common error responses
- include JWT bearer authentication where required
- not include Telegram
api_hashor session strings in public schemas - not mix Swagger annotations with MTProto business logic if a separate OpenAPI file is used
Security rules
- Never commit
.env. - Never expose Telegram
api_hashto frontend/client apps. - Never expose Telegram session strings to frontend/client apps.
- Store sessions locally only for development.
- For production, recommend encrypted session storage.
- Use JWT for backend API authorization after Telegram login.
- Use validation middleware for request bodies and params.
- Do not implement scraping, spam, mass messaging, bypassing restrictions, account abuse, or automation that violates Telegram rules.
Default implementation workflow
When the user asks to create a project:
- Create package metadata and scripts.
- Create
.env.example. - Create Express app and server.
- Create config modules.
- Create session storage service.
- Create Telegram client factory.
- Create auth flow service.
- Create chat service.
- Create controllers and routes.
- Create validators and middleware.
- Create Swagger config and docs routes.
- Add Swagger annotations or OpenAPI specs for all endpoints.
- Create README and docs files.
- Ensure no Telegraf/Bot API/BullMQ/Redis/PostgreSQL/frontend files were added.
- Explain how to run and test login flow.
Preferred Swagger approach
For small projects, use swagger-jsdoc comments inside route files or a separate src/config/swagger.js file.
For cleaner structure, prefer:
src/config/swagger.js
src/routes/docs.routes.js
Swagger dependencies:
npm install swagger-jsdoc swagger-ui-express
Suggested user prompt
Use $telegram-mtproto-api.
Create a backend-only Node.js/Express Telegram MTProto API.
Requirements:
- Use MTProto user login with phone code and optional 2FA password.
- Implement local development session storage.
- Implement /api/me, /api/chats, get messages, and send text message endpoints.
- Add Swagger UI at /api/docs and OpenAPI JSON at /api/docs.json.
- Add .env.example and docs for getting TELEGRAM_API_ID and TELEGRAM_API_HASH.
- No frontend.
- No Telegraf.
- No Telegram Bot API.
- No BullMQ.
- No Redis.
- No PostgreSQL.
What ships with it: 16 files
10.9 KB alongside SKILL.md, 7 of them executable
assets/
- controller-template.jsruns271 B
- docs-route-template.jsruns335 B
- env.example252 B
- mtproto-client-template.jsruns430 B
- route-template.jsruns654 B
- service-template.jsruns251 B
- swagger-config-template.jsruns836 B
docs/
- api-contract.md1.3 KB
- auth-flow.md827 B
- get-telegram-api-keys.md1.1 KB
- security-notes.md805 B
- swagger.md747 B
references/
scripts/
- check-scope.jsruns887 B
- README.md1.0 KB