# Telegram MCP Server

A powerful Telegram integration server that provides various tools for managing contacts, sending messages, and retrieving channel information through MCP (Multi-Client Protocol).

## Features

- **Contact Management**

  - Get list of contacts
  - Search contacts
  - Get last interactions

- **Messaging**

  - Send messages to contacts by name or phone number
  - Get chat history with date range filtering
  - View last interactions

- **Channel Features**
  - Get posts from channels
  - Search channels
  - View channel information
  - Filter posts by date range

## Prerequisites

- Python 3.8 or higher
- Node.js 14 or higher (for npx installation)
- Telegram API credentials (api_id and api_hash)
- A Telegram account

## Installation

1. Clone the repository:

```bash
git clone https://github.com/yourusername/telegram-MCP-server.git
cd telegram-MCP-server
```

2. Install required dependencies:

```bash
uv venv .venv  # Create a virtual environment
source .venv/bin/activate  # Activate it (Linux/macOS)
.\venv\Scripts\activate  # Activate it (Windows)
uv pip install .
```

3. Get your Telegram API ID and API Hash:

- Go to https://my.telegram.org
- Log in with your phone number
- Click on "API development tools"
- Fill in the required fields (you can use any app title and short name)
- After submitting, you will see your API ID and API Hash

4. Create a `.env` file in the project root with your Telegram credentials:

```env
TG_API_ID=your_api_id
TG_API_HASH=your_api_hash
phone=your_phone_number  # Format: +1234567890
```

5. Authenticate your Telegram for first time only

```bash
uv run telegram_auth.py
```

Enter the code you received via telegram when prompted.

## Integration with Cursor/Claude Desktop

Copy the below json with the appropriate {{PATH}} values:

```json
{
  "mcpServers": {
    "telegram": {
      "command": "{{PATH_TO_UV}}", // Run `which uv` and place the output here
      "args": [
        "--directory",
        "{{PATH_TO_SRC}}\\telegram-mcp-server", // cd into the repo, run `pwd` and enter the output here + "/whatsapp-mcp-server"
        "run",
        "main.py"
      ]
    }
  }
}
```

For **Claude**, save this as `claude_desktop_config.json` in your Claude Desktop configuration directory at:

```
~/Library/Application Support/Claude/claude_desktop_config.json
```

For **Cursor**, save this as `mcp.json` in your Cursor configuration directory at:

```
~/.cursor/mcp.json
```

## Tool Documentation

### get_contacts()

Returns a list of all your Telegram contacts with their names, phone numbers, and usernames.

### send_message_by_identifier(identifier: str, message: str)

Sends a message to a contact identified by either their name or phone number.

- `identifier`: Contact's name or phone number
- `message`: Text message to send

### get_last_interaction(identifier: str)

Returns the most recent message exchanged with a specific contact.

- `identifier`: Contact's name or phone number

### get_chat_history(identifier: str, start_date: str = None, end_date: str = None, limit: int = 20)

Retrieves chat history with a contact within a specified timeframe.

- `identifier`: Contact's name or phone number
- `start_date`: Optional start date (YYYY-MM-DD)
- `end_date`: Optional end date (YYYY-MM-DD)
- `limit`: Maximum number of messages to return

### get_channel_posts(channel_name: str, start_date: str = None, end_date: str = None, limit: int = 20)

Gets posts from a Telegram channel.

- `channel_name`: Channel username or name
- `start_date`: Optional start date (YYYY-MM-DD)
- `end_date`: Optional end date (YYYY-MM-DD)
- `limit`: Maximum number of posts to return

## Error Handling

The server includes comprehensive error handling for:

- Invalid credentials
- Network issues
- Rate limiting
- Invalid parameters
- Permission errors

## Security Considerations

- Store API credentials securely
- Never share your `.env` file
- Use environment variables in production
- Implement rate limiting for production use
- Monitor usage and implement logging

## Contributing

1. Fork the repository
2. Create a feature branch
3. Commit your changes
4. Push to the branch
5. Create a Pull Request

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

## Acknowledgments

- Telethon library for Telegram API integration
- FastMCP for the server framework
