mcp snapshot server

Local 2025-08-31 23:15:33 0

A Model Context Protocol server that enables interaction with Snapshot.org, providing tools to query Snapshot spaces, proposals, and users through natural language.


A Model Context Protocol server for interacting with Snapshot.org. This server provides MCP-compliant tools for querying Snapshot spaces, proposals, and users.

Installation

npm install mcp-snapshot-server

Usage with Claude Desktop

In your Claude Desktop config file (located at ~/Library/Application Support/Claude/claude_desktop_config.json on Mac or %APPDATA%Claudeclaude_desktop_config.json on Windows):

{
    "mcpServers": {
        "snapshot": {
            "command": "node",
            "args": [
                "/ABSOLUTE/PATH/TO/snapshot-server/build/index.js"
            ]
        }
    }
}

Available Tools

getSpaces

Get a list of Snapshot spaces - limit: Number of spaces to fetch (optional) - skip: Number of spaces to skip (optional)

getRankedSpaces

Get a ranked list of Snapshot spaces with detailed information - first: Number of spaces to fetch (default: 18) - skip: Number of spaces to skip (default: 0) - category: Category to filter by (default: 'all') - search: Search term to filter spaces (optional)

getProposals

Get proposals for a specific space - spaceId: ID of the space - state: Filter by proposal state (active, closed, pending, all) - limit: Number of proposals to fetch

getProposal

Get details of a specific proposal - proposalId: ID of the proposal

getUser

Get information about a Snapshot user - address: Ethereum address of the user

Development

  1. Clone the repository:

    git clone https://github.com/crazyrabbitLTC/mcp-snapshot-server.git

  2. Install dependencies:

    npm install

  3. Build the project:

    npm run build

License

MIT © Dennison Bertram

[
  {
    "description": "Get list of Snapshot spaces",
    "inputSchema": {
      "properties": {
        "limit": {
          "description": "Number of spaces to fetch",
          "type": "number"
        },
        "skip": {
          "description": "Number of spaces to skip",
          "type": "number"
        }
      },
      "type": "object"
    },
    "name": "getSpaces"
  },
  {
    "description": "Get proposals for a Snapshot space",
    "inputSchema": {
      "properties": {
        "limit": {
          "description": "Number of proposals to fetch",
          "type": "number"
        },
        "spaceId": {
          "description": "ID of the space",
          "type": "string"
        },
        "state": {
          "description": "Filter by proposal state (active, closed, pending, all)",
          "type": "string"
        }
      },
      "required": [
        "spaceId"
      ],
      "type": "object"
    },
    "name": "getProposals"
  },
  {
    "description": "Get details of a specific proposal",
    "inputSchema": {
      "properties": {
        "proposalId": {
          "description": "ID of the proposal",
          "type": "string"
        }
      },
      "required": [
        "proposalId"
      ],
      "type": "object"
    },
    "name": "getProposal"
  },
  {
    "description": "Get information about a Snapshot user",
    "inputSchema": {
      "properties": {
        "address": {
          "description": "Ethereum address of the user",
          "type": "string"
        }
      },
      "required": [
        "address"
      ],
      "type": "object"
    },
    "name": "getUser"
  },
  {
    "description": "Get ranked list of Snapshot spaces with detailed information",
    "inputSchema": {
      "properties": {
        "category": {
          "description": "Category to filter by (default: 'all')",
          "type": "string"
        },
        "first": {
          "description": "Number of spaces to fetch (default: 18)",
          "type": "number"
        },
        "search": {
          "description": "Search term to filter spaces",
          "type": "string"
        },
        "skip": {
          "description": "Number of spaces to skip (default: 0)",
          "type": "number"
        }
      },
      "type": "object"
    },
    "name": "getRankedSpaces"
  }
]