MongoDB Atlas MCP Server
# MongoDB Atlas MCP Server
A Model Context Protocol (MCP) server that provides access to the MongoDB Atlas API. This server wraps the [mongodb-atlas-api-client](https://www.npmjs.com/package/mongodb-atlas-api-client) package to expose MongoDB Atlas functionality through MCP tools.
## Features
This MCP server exposes most of the mongodb-atlas-api-client surface as MCP tools.
### Database Users
- `user_get` — Get a database user by username
- `user_get_all` — List all database users
- `user_create` — Create a database user
- `user_update` — Update a database user
- `user_delete` — Delete a database user
### Clusters
- `cluster_get` — Get cluster details
- `cluster_get_all` — List clusters
- `cluster_create` — Create cluster
- `cluster_update` — Update cluster
- `cluster_delete` — Delete cluster
- `cluster_get_advanced_configuration` — Get processArgs (advanced config)
- `cluster_update_advanced_configuration` — Update processArgs (advanced config)
- `cluster_test_primary_failover` — Initiate a test primary failover
### Projects
- `project_get_by_id` — Get project by ID
- `project_get_by_name` — Get project by name
- `project_get_all` — List projects
- `project_create` — Create project
- `project_delete` — Delete project
- `project_get_teams` — List teams for a project
- `project_remove_user` — Remove a user from a project
- `project_assign_teams` — Assign teams to a project
### Cloud Backups
- `cloud_backup_get_snapshots` — List cloud backup snapshots (replicaset)
- `cloud_backup_get_snapshot` — Get a specific snapshot
- `cloud_backup_get_restore_job` — Get a snapshot restore job
- `cloud_backup_create_restore_job` — Create a snapshot restore job
### Organizations
- `organization_get_by_id` — Get organization by ID
- `organization_get_all` — List organizations
- `organization_get_users` — List users in an organization
- `organization_get_projects` — List projects in an organization
- `organization_delete` — Delete organization
- `organization_rename` — Rename organization
- `organization_invite` — Invite users to organization
### Project Access Lists (current)
- `project_access_list_get_all` — List IP access list entries
- `project_access_list_get` — Get a specific access list entry
- `project_access_list_create` — Add entries to access list
- `project_access_list_update` — Upsert access list entries (POST semantics)
- `project_access_list_delete` — Delete an access list entry
### Project Whitelist (legacy)
- `project_whitelist_get_all` — List whitelist entries
- `project_whitelist_get` — Get a whitelist entry
- `project_whitelist_create` — Add whitelist entries
- `project_whitelist_update` — Update whitelist entries
- `project_whitelist_delete` — Delete a whitelist entry
### Events
- `events_get_all` — List project events
- `events_get` — Get event by ID (project scope)
- `events_get_by_org` — Get event by ID for an organization
- `events_get_all_by_org` — List organization events
### Atlas Search
- `atlas_search_get_all` — List indexes for a collection
- `atlas_search_create` — Create an index
- `atlas_search_get` — Get index by ID
- `atlas_search_update` — Update index by ID
- `atlas_search_delete` — Delete index by ID
- `atlas_search_get_all_analyzers` — List analyzers
- `atlas_search_upsert_analyzer` — Create/Update analyzers
### Atlas Users (Account-level)
- `atlas_user_get_by_name` — Get Atlas user by username
- `atlas_user_get_by_id` — Get Atlas user by ID
- `atlas_user_get_all` — List Atlas users for the project
- `atlas_user_create` — Create Atlas user
- `atlas_user_update` — Update Atlas user
### Alerts
- `alert_get_all` — List project alerts
- `alert_get` — Get alert by ID
- `alert_acknowledge` — Acknowledge alert
### Data Lake
- `datalake_get` — Get Data Lake by name
- `datalake_get_all` — List Data Lakes
- `datalake_create` — Create Data Lake
- `datalake_update` — Update Data Lake
- `datalake_delete` — Delete Data Lake
- `datalake_get_logs_stream` — Get query logs (returns base64-encoded gzip data)
### Cloud Provider Access
- `cloud_provider_access_get_all` — List cloud provider access roles
- `cloud_provider_access_create` — Create a role
- `cloud_provider_access_update` — Update a role (roleId + body)
- `cloud_provider_access_delete` — Delete a role (cloudProvider + roleId)
## Installation
1. Clone this repository:
```bash
git clone https://github.com/montumodi/mongodb-atlas-mcp-server.git
cd mongodb-atlas-mcp-server
```
2. Install dependencies:
```bash
npm install
```
## Configuration
Before using the server, you need to set up environment variables with your MongoDB Atlas API credentials:
### Required Environment Variables
- `MONGODB_ATLAS_PUBLIC_KEY` - Your MongoDB Atlas API public key
- `MONGODB_ATLAS_PRIVATE_KEY` - Your MongoDB Atlas API private key
- `MONGODB_ATLAS_PROJECT_ID` - Your MongoDB Atlas project/group ID
### Optional Environment Variables
- `MONGODB_ATLAS_BASE_URL` - Atlas API base URL (defaults to `https://cloud.mongodb.com/api/atlas/v1.0`)
### Getting Atlas API Keys
1. Log in to [MongoDB Atlas](https://cloud.mongodb.com/)
2. Go to **Organization Settings** → **Access Manager** → **API Keys**
3. Click **Create API Key**
4. Assign appropriate permissions (Project Read/Write access recommended)
5. Copy the public and private keys
6. Find your Project ID in the project settings
### Example Configuration
```bash
export MONGODB_ATLAS_PUBLIC_KEY="your-public-key"
export MONGODB_ATLAS_PRIVATE_KEY="your-private-key"
export MONGODB_ATLAS_PROJECT_ID="your-project-id"
```
Or create a `.env` file:
```env
MONGODB_ATLAS_PUBLIC_KEY=your-public-key
MONGODB_ATLAS_PRIVATE_KEY=your-private-key
MONGODB_ATLAS_PROJECT_ID=your-project-id
```
## Usage
### Running the Server
```bash
npm start
```
### Using with MCP Clients
This server implements the Model Context Protocol and can be used with any MCP-compatible client. The server communicates over stdin/stdout.
### Example Tool Usage
#### Get All Clusters
```json
{
"name": "cluster_get_all",
"arguments": {
"options": {
"itemsPerPage": 10
}
}
}
```
#### Create a Database User
```json
{
"name": "user_create",
"arguments": {
"body": {
"username": "newuser",
"password": "securepassword123",
"roles": [
{
"databaseName": "myapp",
"roleName": "readWrite"
}
],
"databaseName": "admin"
}
}
}
```
#### Get Project Events
#### Get Data Lake Logs (example)
Note: The logs are returned as base64-encoded gzip data in the `text` response. Decode base64 and then gunzip to read.
```json
{
"name": "datalake_get_logs_stream",
"arguments": { "dataLakeName": "MyDataLake" }
}
```
```json
{
"name": "events_get_all",
"arguments": {
"options": {
"itemsPerPage": 20,
"eventType": ["CLUSTER"]
}
}
}
```
## Error Handling
The server provides detailed error messages for:
- Missing or invalid API credentials
- Network connectivity issues
- Invalid parameters
- MongoDB Atlas API errors
## Development
### Running in Development Mode
```bash
npm run dev
```
### Testing
```bash
npm test
```
## Dependencies
- **@modelcontextprotocol/sdk** - MCP SDK for server implementation
- **mongodb-atlas-api-client** - MongoDB Atlas API client library
## API Reference
This server exposes MongoDB Atlas API functionality through MCP tools. For detailed information about the underlying Atlas API, refer to:
- [MongoDB Atlas API Documentation](https://docs.atlas.mongodb.com/reference/api/)
- [mongodb-atlas-api-client Documentation](https://www.npmjs.com/package/mongodb-atlas-api-client)
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## License
MIT
## Support
For issues and questions:
- Check the [MongoDB Atlas API Documentation](https://docs.atlas.mongodb.com/reference/api/)
- Review the [mongodb-atlas-api-client](https://github.com/montumodi/mongodb-atlas-api-client) documentation
- Open an issue in this repository
TDQS
Scored across 76 tools
Most tools have distinct resource-action pairs, but there is potential confusion between `project_access_list_*` and legacy `project_whitelist_*` tools, as they serve similar purposes. Descriptions help differentiate them, but an agent might still pick the wrong one.
All tools follow a consistent `resource_verb` naming pattern in snake_case (e.g., `cluster_create`, `atlas_search_get_all`). No mixed conventions or ambiguous verb styles, making the pattern predictable.
76 tools is quite high, covering a broad API surface. While each tool has a specific purpose, the sheer number can overwhelm agents and may include redundant or overly granular operations (e.g., legacy whitelist vs. access list).
The tool set covers major CRUD operations for clusters, users, backups, search indexes, projects, and organizations. Minor gaps exist, such as no alert update/delete and limited team management, but core workflows are supported.