Skip to main content
Glama
petekmet

MCP Datastore Server

by petekmet
README.md
# MCP Datastore Server

A Model Context Protocol (MCP) server that provides access to Google Firestore in Datastore mode.

## Features

This MCP server exposes the following tools for interacting with Google Cloud Datastore:

### Entity Operations
- **datastore_get**: Get an entity by kind and key
- **datastore_insert**: Insert a new entity
- **datastore_update**: Update an existing entity
- **datastore_upsert**: Insert or update an entity
- **datastore_delete**: Delete an entity by kind and key

### Query Operations
- **datastore_query**: Query entities with filters and ordering
- **datastore_runAggregationQuery**: Run aggregation queries (count, sum, avg)
- **datastore_listKinds**: List all entity kinds (types) in the Datastore

### Key Operations
- **datastore_allocateIds**: Allocate IDs for incomplete keys
- **datastore_createKey**: Create a complete or incomplete key

### Transaction Operations
- **datastore_runInTransaction**: Execute multiple operations in a transaction

## Setup

### Prerequisites

1. A Google Cloud project with Datastore API enabled
2. Service account credentials with appropriate Datastore permissions

### Installation

```bash
npm install
npm run build
```

### Configuration

Set the following environment variables:

```bash
# Path to your service account JSON key file
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json

# Your Google Cloud project ID
export GOOGLE_CLOUD_PROJECT=your-project-id
```

Or you can provide them when running the server:
```bash
GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json GOOGLE_CLOUD_PROJECT=your-project-id npm start
```

## Usage

### Running the Server

```bash
npm start
```

### Using with Claude Desktop

Add this to your Claude Desktop configuration file:

**MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "datastore": {
      "command": "node",
      "args": [
        "d:\\projects\\mcp-datastore\\build\\index.js"
      ],
      "env": {
        "GOOGLE_APPLICATION_CREDENTIALS": "C:\\path\\to\\service-account-key.json",
        "GOOGLE_CLOUD_PROJECT": "your-project-id"
      }
    }
  }
}
```

## Tool Examples

### Get an Entity

```javascript
{
  "kind": "User",
  "keyId": "12345"
}
```

### Insert an Entity

```javascript
{
  "kind": "User",
  "data": {
    "name": "John Doe",
    "email": "john@example.com",
    "age": 30
  }
}
```

### Query Entities

```javascript
{
  "kind": "User",
  "filters": [
    {
      "property": "age",
      "operator": ">",
      "value": 25
    }
  ],
  "orderBy": [
    {
      "property": "name",
      "descending": false
    }
  ],
  "limit": 10
}
```

### Run Aggregation Query

```javascript
{
  "kind": "Order",
  "aggregations": [
    {
      "type": "count",
      "alias": "total_orders"
    },
    {
      "type": "sum",
      "property": "amount",
      "alias": "total_amount"
    }
  ]
}
```

### List Entity Kinds

```javascript
{
  "namespace": "optional-namespace"  // Optional: specify namespace to list kinds from
}
```

This returns all entity kinds (types) in your Datastore, including both user-defined kinds and system metadata kinds (prefixed with `__Stat_`).

## License

MIT

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Each targets a specific Datastore operation (e.g., get vs. query vs. runAggregationQuery), and even similar-sounding tools like insert, update, and upsert are clearly differentiated in their descriptions.

Naming Consistency5/5

All tools follow a consistent 'datastore_verbNoun' pattern with snake_case throughout. The naming is predictable and readable, making it easy to understand each tool's function at a glance.

Tool Count5/5

With 11 tools, this server is well-scoped for Datastore operations. Each tool earns its place by covering essential CRUD, querying, transaction, and metadata functions without being overwhelming or sparse.

Completeness5/5

The toolset provides complete coverage for Datastore operations, including key management (allocateIds, createKey), CRUD (insert, get, update, delete, upsert), querying (query, runAggregationQuery), transactions (runInTransaction), and metadata (listKinds). There are no obvious gaps that would hinder agent workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues