Skip to main content
Glama
alpabon73

Dex MCP Server

by alpabon73
README.md
# Dex MCP Server

[![Release](https://img.shields.io/badge/release-v1.0.0-blue)](https://github.com/alpabon73/dex-mcp-server/releases/tag/v1.0.0)

> **v1.0.0 is now released!**
> - See [RELEASE-NOTES.md](./RELEASE-NOTES.md) and [GitHub Releases](https://github.com/alpabon73/dex-mcp-server/releases) for highlights and upgrade info.
> - **How to upgrade:**
>   1. Pull the latest code: `git pull --rebase origin main`
>   2. Ensure your `.env` file is present and contains a valid `DEX_API_KEY`.
>   3. Use the `kill-dex-mcp-server.sh` script before agent startup if needed.
>   4. See `copilot-instructions.md` for agent/CLI usage and best practices.

A Model Context Protocol (MCP) server that provides AI agents with comprehensive contact relationship management capabilities through the Dex API.

## Features

### 🚀 Contact Management
- **Create, Read, Update, Delete** contacts with full details
- **Search contacts** by name, email, or company
- **Comprehensive contact fields**: name, company, job title, description, emails, phone numbers

### 📝 Note Management  
- **Contact-linked notes** stored as timeline items
- **Create, update, delete** notes for any contact
- **Search notes** by content across all contacts
- **Pagination support** for large note collections

### ⏰ Reminder Management
- **Set reminders** linked to specific contacts
- **Complete, update, delete** reminders as needed
- **Search reminders** by text content
- **Recurrence support** for recurring follow-ups
- **Due date tracking** with proper date formatting

## Installation

### Prerequisites
- Node.js 18 or later
- Dex API account and API key

### Setup

1. Clone this repository:
```bash
git clone https://github.com/alpabon73/dex-mcp-server.git
cd dex-mcp-server
```

2. Install dependencies:
```bash
npm install
```

3. Configure your Dex API key in `src/index.ts`:
```typescript
const API_KEY = 'your-dex-api-key-here';
```

4. Build the server:
```bash
npm run build
```

## Environment Variables

This project requires a Dex API key. **Never commit your real API key to a public repository.**

1. Copy `.env.example` to `.env`:
   ```sh
   cp .env.example .env
   ```
2. Edit `.env` and set your real Dex API key:
   ```
   DEX_API_KEY=your-dex-api-key-here
   ```
3. The server will not start unless `DEX_API_KEY` is set in your environment or `.env` file.

**.env is already in .gitignore and will never be committed.**

## Usage

### Standalone Usage
```bash
npm start
```

### With AnythingLLM
Add to your MCP server configuration:
```json
{
  "servers": {
    "dex-mcp": {
      "command": "/usr/local/bin/node",
      "args": ["/path/to/dex-mcp-server/dist/index.js"],
      "env": {}
    }
  }
}
```

## Available Tools

### Contact Tools (6)
- `get_contacts` - Retrieve contacts with pagination
- `get_contact_by_id` - Get specific contact details
- `search_contacts` - Search by name/company/email
- `create_contact` - Add new contacts
- `update_contact` - Modify existing contacts
- `delete_contact` - Remove contacts

### Note Tools (6)
- `get_notes_by_contact` - Get all notes for a contact
- `get_all_notes` - Retrieve all notes with pagination
- `search_notes` - Search notes by content
- `create_note` - Add notes to contacts
- `update_note` - Modify existing notes
- `delete_note` - Remove notes

### Reminder Tools (6)
- `get_reminders_by_contact` - Get contact reminders
- `get_all_reminders` - Retrieve all reminders with pagination
- `search_reminders` - Search reminders by text
- `create_reminder` - Set new reminders
- `update_reminder` - Modify existing reminders
- `complete_reminder` - Mark reminders as done
- `delete_reminder` - Remove reminders

## Allowed Meeting Types for Notes

When creating a note, you may specify the meeting type using either the display name or the Dex API enum value. The following table shows the accepted values:

| Display Name      | Dex API Enum Value   |
|-------------------|---------------------|
| Note              | note                |
| Call              | call                |
| Email             | email               |
| Text/Messaging    | text_messaging      |
| Linkedin          | linkedin            |
| Skype/Teams       | skype_teams         |
| Slack             | slack               |
| Coffee            | coffee              |
| Networking        | networking          |
| Party/Social      | party_social        |
| Other             | other               |
| Meal              | meal                |
| Meeting           | meeting             |
| Custom            | custom              |

You may use any of the above display names (case-insensitive, spaces and slashes allowed) or the exact enum value. The system will automatically map your input to the correct Dex API value.

## Example Use Cases

- **"Add John Smith from TechCorp as a new contact"**
- **"Set a reminder to follow up with Sarah next week"**
- **"Search for all notes about the ABC project"**
- **"Update Mike's job title to Senior Engineer"**
- **"Show me all pending reminders for this month"**
- **"Create a note about today's meeting with the client"**

## Development

### Scripts
- `npm run build` - Compile TypeScript
- `npm run dev` - Run with ts-node for development
- `npm run watch` - Watch mode compilation
- `npm start` - Run compiled server

### Architecture
- **TypeScript** for type safety
- **Zod** for schema validation
- **Axios** for HTTP requests to Dex API
- **MCP SDK** for protocol implementation

## API Integration

This server integrates with the Dex API using:
- **GraphQL endpoint**: `https://api.getdex.com/v1/graphql`
- **Timeline items** for note storage
- **Reminders table** with contact junction
- **Proper pagination** and search capabilities

## Code Quality & CI

This project uses **TypeScript** for type safety and **ESLint** for code linting. All code is automatically checked for type errors and lint issues in CI (see `.github/workflows/ci.yml`).

- Run type checks locally:
  ```sh
  npm run build # or npx tsc --noEmit
  ```
- Run linter locally:
  ```sh
  npm run lint
  ```

All pull requests must pass CI checks before merging.

## Issue & PR Templates

- Bug reports and feature requests use GitHub issue templates for consistency.
- All pull requests use a PR template to ensure quality and documentation.

## Security & Secrets

- **Never commit secrets or API keys.** `.env` is gitignored and secrets are loaded from environment variables.
- If a secret is ever committed, follow the repo's history-scrubbing protocol (see `scrub-git-history.sh`).

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Run `npm run lint` and `npm run build` to check code quality
6. Submit a pull request

## License

MIT License - see LICENSE file for details

## Support

For issues related to:
- **Dex API**: Check [Dex documentation](https://docs.getdex.com)
- **MCP Protocol**: See [MCP specification](https://spec.modelcontextprotocol.io)
- **This server**: Open an issue in this repository

---

## How to report issues or contribute

- Found a bug or have a feature request? [Open an issue](https://github.com/alpabon73/dex-mcp-server/issues)
- Want to contribute? See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
- Security concerns? See [SECURITY.md](./SECURITY.md) for responsible disclosure.
- For release notes and upgrade info, see [RELEASE-NOTES.md](./RELEASE-NOTES.md) and [CHANGELOG.md](./CHANGELOG.md).