sns mcp server
A Model Context Protocol server that enables interaction with Service Nervous System (SNS) DAOs on the Internet Computer, allowing users to list proposals, view neurons, get system parameters, manage wallets, and vote on proposals.
A Model Context Protocol server that enables interaction with Service Nervous System (SNS) DAOs on the Internet Computer, allowing users to list proposals, view neurons, get system parameters, manage wallets, and vote on proposals.
A Model Context Protocol server for interacting with DAOs on the Internet Computer
This is a TypeScript-based MCP server that implements an interface to Service Nervous System (SNS) DAOs. It demonstrates core MCP concepts by providing tools to interact with decentralized autonomous organizations.
add your seed phrase to env file
cp .env.example .env
list_proposals
- List all proposals for a specific DAO
Takes DAO name as parameter
Returns list of proposals from the specified DAO
list_votable_neurons
- List all votable neurons for a user in a DAO
Takes DAO name and principal ID as parameters
Returns neurons that can vote on proposals
get_system_parameters
- List all configuration parameters for a DAO
Takes DAO name as parameter
Returns system parameters for the specified DAO
wallet
- Get the user's wallet information
Returns the principal ID of the current wallet
vote_proposal
- Vote on a proposal
Install dependencies:
npm install
Build the server:
npm run build
For development with auto-rebuild:
npm run watch
To use with Claude Desktop, add the server config:
On MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"mcp-sns-server": {
"command": "/path/to/mcp-sns-server/build/index.js"
}
}
}
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspector
The Inspector will provide a URL to access debugging tools in your browser.
[
{
"description": "List all proposals",
"inputSchema": {
"properties": {
"daoName": {
"description": "DAO name",
"type": "string"
}
},
"required": [
"daoName"
],
"type": "object"
},
"name": "list_proposals"
},
{
"description": "List all votable neurons",
"inputSchema": {
"properties": {
"daoName": {
"description": "DAO name",
"type": "string"
},
"principalId": {
"description": "Principal ID",
"type": "string"
}
},
"required": [
"principalId"
],
"type": "object"
},
"name": "list_votable_neurons"
},
{
"description": "List all votable neurons, e8s is decimals number of token 1_0000_0000 es8 meaning 1 token",
"inputSchema": {
"properties": {
"daoName": {
"description": "DAO name",
"type": "string"
},
"principalId": {
"description": "Principal ID",
"type": "string"
}
},
"required": [
"daoName",
"principalId"
],
"type": "object"
},
"name": "list_votable_neurons"
},
{
"description": "List all configuration parameters",
"inputSchema": {
"properties": {
"daoName": {
"description": "DAO name",
"type": "string"
}
},
"required": [
"daoName"
],
"type": "object"
},
"name": "get_system_parameters"
},
{
"description": "get my wallet",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "wallet"
},
{
"description": "vote on a proposal",
"inputSchema": {
"properties": {
"daoName": {
"description": "DAO name",
"type": "string"
},
"neuronId": {
"description": "Neuron ID",
"type": "string"
},
"principalId": {
"description": "Principal ID",
"type": "string"
},
"proposalId": {
"description": "Proposal ID",
"type": "string"
},
"vote": {
"description": "Vote (yes, no, unspecified)",
"type": "string"
}
},
"required": [
"daoName",
"principalId",
"neuronId",
"proposalId",
"vote"
],
"type": "object"
},
"name": "vote_proposal"
}
]