Skip to main content
Glama
mzkrasner

Twitter Client MCP

by mzkrasner
README.md
# Twitter Client MCP

A Model Context Protocol (MCP) server that provides secure access to Twitter functionality through the `agent-twitter-client` library.

## Features

The Twitter Client MCP provides the following capabilities:

- **Profile Operations**
  - Get profile information by username
  - Get the authenticated user's profile

- **Tweet Operations**
  - Get a specific tweet by ID
  - Get tweets from a user
  - Send new tweets
  - Like tweets
  - Retweet tweets

- **Search Operations**
  - Search for tweets
  - Search for profiles

- **Relationship Operations**
  - Get followers of a user
  - Get users that a user is following
  - Follow a user

## Security ⚠️

> **IMPORTANT: TWITTER CREDENTIAL PROTECTION**

This MCP server requires Twitter credentials to operate. To protect these sensitive credentials:

1. **NEVER share your credentials**
2. **NEVER run commands that display your credentials**
3. **NEVER allow the LLM to execute shell commands directly** without your approval

### Multiple Layers of Protection

This server implements several layers of security to keep your credentials safe:

#### 1. Credential Isolation
- Your credentials are only loaded during initialization
- After loading, credentials are immediately removed from environment variables
- Credentials are never logged or transmitted to the LLM

#### 2. Memory Protection
- Secure memory allocation using sodium-native
- Memory locking to prevent swapping to disk
- Zero-out memory buffers after use

#### 3. Access Prevention
- Secure environment variable handling
- Strict validation of required environment variables
- Console output sanitization to prevent leaking secrets

## Setup

1. Clone the repository
2. Install dependencies:
   ```bash
   npm install
   ```
3. Build the project:
   ```bash
   npm run build
   ```

## Required Environment Variables

The Twitter Client MCP requires the following environment variables:

```
TWITTER_USERNAME=your_username
TWITTER_PASSWORD=your_password
TWITTER_EMAIL=your_email@example.com
```

Optionally, you can add Twitter API v2 credentials for advanced functionality:

```
TWITTER_API_KEY=your_api_key
TWITTER_API_SECRET_KEY=your_api_secret
TWITTER_ACCESS_TOKEN=your_access_token
TWITTER_ACCESS_TOKEN_SECRET=your_access_secret
```

## Tools

The server exposes the following MCP tools:

| Tool Name | Description | Parameters |
|-----------|-------------|------------|
| `profileByUsername` | Get a Twitter profile by username | `username`: String |
| `myProfile` | Get the authenticated user's profile | `check`: Boolean |
| `getTweet` | Get a specific tweet by ID | `tweetId`: String |
| `getUserTweets` | Get tweets from a Twitter user | `username`: String, `count?`: Number |
| `sendTweet` | Post a new tweet | `text`: String, `inReplyToId?`: String |
| `likeTweet` | Like a tweet | `tweetId`: String |
| `retweet` | Retweet a tweet | `tweetId`: String |
| `searchTweets` | Search for tweets | `query`: String, `count?`: Number, `searchMode?`: String ('top', 'latest', 'photos', 'videos') |
| `searchProfiles` | Search for Twitter profiles | `query`: String, `count?`: Number |
| `getFollowers` | Get a list of users following a Twitter user | `username`: String, `count?`: Number |
| `getFollowing` | Get a list of users that a Twitter user is following | `username`: String, `count?`: Number |
| `followUser` | Follow a Twitter user | `username`: String |

## Usage

### Running Locally

```bash
# Start the server with environment variables
TWITTER_USERNAME=your_username TWITTER_PASSWORD=your_password TWITTER_EMAIL=your_email@example.com npm start
```

### Adding to Cursor

To add this MCP server to Cursor:

1. In Cursor, go to Settings > MCP Servers
2. Click "Add Server"
3. Configure the server with the following settings:
   - **Name**: `Twitter Client MCP` (or any name you prefer)
   - **Type**: `command`
   - **Command**: `node`
   - **Arguments**: `/path/to/twitter-client-mcp/dist/index.js` (replace with your actual path)
   - **Environment Variables**:
     - `TWITTER_USERNAME`: Your Twitter username
     - `TWITTER_PASSWORD`: Your Twitter password
     - `TWITTER_EMAIL`: Your Twitter email
     - Any other variables you want to set
4. Click "Save"

### Using NPX (Recommended)

You can also use npx to run the MCP server directly from GitHub:

```bash
TWITTER_USERNAME=your_username TWITTER_PASSWORD=your_password TWITTER_EMAIL=your_email@example.com npx -y github:mzkrasner/twitter-client-mcp
```

### Using Environment Variables in Cursor Configuration

For more security and ease of use, configure Cursor via the `.cursor/mcp.json` file in your home directory:

```json
{
  "mcpServers": {
    "twitter-client-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "github:mzkrasner/twitter-client-mcp"
      ],
      "env": {
        "TWITTER_USERNAME": "your_username",
        "TWITTER_PASSWORD": "your_password",
        "TWITTER_EMAIL": "your_email@example.com"
      }
    }
  }
}
```

## Development

### Important Note for Development

When developing the MCP server, use `console.error()` instead of `console.log()` for all debugging and logging statements. The MCP protocol communicates with the client via stdout, so any `console.log()` statements will interfere with this communication.

## License

MIT