Futarchy MCP Server
The Futarchy MCP Server enables interaction with the Futarchy protocol on Solana, providing the following capabilities:
DAO Management: Retrieve all DAOs or a specific DAO by ID
Proposal Management: Fetch DAO proposals, get specific proposal details, and create new proposals
Sentiment Analysis: Analyze proposal sentiment based on Discord and Twitter data
Market Trading: Buy and sell tokens in both pass and fail markets for proposals
Custom Tools: Integrate with Cursor for advanced protocol interactions
Supports interacting with the Futarchy MCP server via curl commands for accessing DAO and proposal data, including creating new proposals.
Collects data for sentiment analysis about proposals, enabling analysis of community discussions to understand reactions to proposals within the Futarchy protocol.
Allows testing the Futarchy MCP server routes using Postman to access DAO and proposal information from the Futarchy protocol.
Enables interaction with the Futarchy protocol on Solana blockchain, providing tools to manage DAOs, proposals, and analyze sentiment for governance decisions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Futarchy MCP Serverget sentiment analysis for proposal F3hsZzWinRAHbr6CUxdkUFBCH8qNk6Mi9Zfu3PMX49BC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Futarchy MCP
A server implementation for interacting with the Futarchy protocol on Solana.
Setup Instructions
Clone the repository:
git clone <repository-url>
cd futarchy-mcpInstall dependencies:
npm installConfigure RPC URL:
Open
src/server.tsUpdate the RPC URL in the connection initialization:
const connection = new Connection('YOUR_RPC_URL_HERE');You can use:
Mainnet:
https://api.mainnet-beta.solana.comDevnet:
https://api.devnet.solana.comOr your own RPC provider URL (works only with this)
Start the development server:
npm run devRelated MCP server: Solana MCP Server
Available Routes
DAO Routes
GET /daos- Get all DAOsGET /daos/:id- Get a specific DAO by IDGET /daos/:id/proposals- Get all proposals for a specific DAOPOST /daos/:id/proposals- Create a new proposal for a DAO (not tested as of now because dao creation route does not exist)Body:
{ "descriptionUrl": "string", "baseTokensToLP": "number", "quoteTokensToLP": "number" }
Proposal Routes
GET /proposals/:id- Get a specific proposal by ID
Testing
You can test the routes using tools like Postman or curl. The server runs on port 9000 by default.
Example curl commands:
# Get all DAOs
curl http://localhost:9000/daos
# Get a specific DAO
curl http://localhost:9000/daos/<dao-address>
# Get proposals for a DAO
curl http://localhost:9000/daos/<dao-address>/proposals
# Create a new proposal
curl -X POST http://localhost:9000/daos/<dao-address>/proposals \
-H "Content-Type: application/json" \
-d '{
"descriptionUrl": "https://example.com/proposal",
"baseTokensToLP": 1000,
"quoteTokensToLP": 1000
}'MCP Server for Cursor
This project also includes an MCP (Model Context Protocol) server that allows Cursor to interact with the Futarchy backend through custom tools.
Setting up the MCP Server
Run the setup script to install dependencies, build the project, and configure Cursor:
chmod +x setup.sh
./setup.shOr manually configure it:
Install dependencies and build the project:
npm install npm run buildOpen or create
~/.cursor/mcp.jsonAdd the following configuration (adjust the path as needed):
{ "mcpServers": { "futarchy-routes": { "command": "node", "args": ["<absolute-path-to-project>/dist/mcp/bin/mcp-futarchy.js"] } } }
Using the MCP Server in Cursor
You can use the following tools in Cursor's chat:
getDaos- Get all DAOs from the Futarchy systemgetDao- Get a specific DAO by IDgetProposals- Get all proposals for a specific DAOgetProposal- Get a specific proposal by IDcreateProposal- Create a new proposal for a DAO
For example, in Cursor's chat, you can say:
Use the getDaos tool to retrieve a list of all DAOs from the futarchy-routes backend.For more details about the MCP server, see src/mcp/README.md.
Sentiment Analysis Feature
The Futarchy MCP Server now includes a sentiment analysis tool that analyzes sentiment from Discord and Twitter data for specific proposals. This feature helps in understanding community sentiment about proposals and can be used to make more informed decisions.
How It Works
The sentiment analysis tool collects data from Discord and Twitter about a specific proposal.
It analyzes the sentiment using natural language processing techniques.
It categorizes the sentiment into different categories (Tokenomics, Protocol Parameters, etc.).
It generates a summary, key points, and concerns based on the analysis.
The results are presented in a structured format that can be easily consumed by frontends.
Example Response
{
"proposalId": "F3hsZzWinRAHbr6CUxdkUFBCH8qNk6Mi9Zfu3PMX49BC",
"sentimentScore": -0.8,
"primaryCategory": "Tokenomics",
"categories": [
{
"name": "Tokenomics",
"score": 0.4
},
{
"name": "Protocol Upgrades",
"score": 0.3
},
{
"name": "Partnerships Integrations",
"score": 0.2
},
{
"name": "Protocol Parameters",
"score": 0.1
}
],
"summary": "The proposal to launch a new Horizon token for the Aave ecosystem has faced significant backlash from the community...",
"keyPoints": [
"The proposed token launch is seen as unnecessary and potentially harmful to the Aave token and community.",
"The revenue-sharing model is perceived as frontloaded and unfair, favoring early years when adoption and revenue may be low.",
"There is a desire to maintain the Aave token as the primary governance and utility token for the ecosystem."
],
"concerns": [
"Dilution of the Aave token's value and attention.",
"Misalignment of incentives with the proposed revenue-sharing model.",
"Creation of a separate entity that could compete with the Aave ecosystem.",
"Lack of transparency and community involvement in the decision-making process."
],
"sources": {
"discord": true,
"twitter": true
}
}How to Use
You can use the sentiment analysis tool in your MCP server as follows:
const result = await mcp_futarchy_routes_getProposalSentiment({
proposalId: "F3hsZzWinRAHbr6CUxdkUFBCH8qNk6Mi9Zfu3PMX49BC"
});This will return the sentiment analysis for the specified proposal.
Available Tools
10 toolsbuyInFailMarketC
Buy tokens in the fail market for a proposal
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | The ID of the proposal to trade in | |
| amount | Yes | Amount to buy | |
| user | Yes | User's public key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'Buy tokens' which implies a transactional operation, but doesn't specify if this requires authentication, has rate limits, affects token balances, or what happens on failure. For a financial tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and target, making it easy to parse quickly. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a financial transaction tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'fail market' entails, the expected outcome (e.g., token transfer, price impact), or error conditions. For a tool with 3 required parameters and transactional nature, more context is needed to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all three parameters (proposalId, amount, user) with clear descriptions. The description adds no additional meaning beyond the schema, such as explaining what 'amount' represents (e.g., token units) or how 'user' is used. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Buy tokens') and target ('in the fail market for a proposal'), which is specific and distinguishes it from sibling tools like 'sellInFailMarket' or 'buyInPassMarket'. However, it doesn't fully explain what 'fail market' means or how it differs from 'pass market', leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'sellInFailMarket' or 'buyInPassMarket'. It doesn't mention prerequisites, such as needing a proposal in a specific state, or contextual factors like market conditions. Without this, users might struggle to choose the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buyInPassMarketC
Buy tokens in the pass market for a proposal
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | The ID of the proposal to trade in | |
| amount | Yes | Amount to buy | |
| user | Yes | User's public key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states 'Buy tokens' which implies a transactional/mutative operation, but fails to describe critical aspects like authentication needs, financial implications (e.g., token costs), rate limits, or what happens upon execution (e.g., token transfer confirmation). This leaves significant gaps for agent understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a financial transaction tool with no annotations and no output schema, the description is insufficient. It doesn't explain return values, error conditions, or behavioral details like side effects (e.g., token balance changes). For a tool involving token purchases, more context is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are documented in the schema. The description adds no additional meaning about parameters beyond implying 'proposalId' identifies the proposal and 'amount' specifies purchase quantity. It meets the baseline for high schema coverage but doesn't enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Buy tokens') and target resource ('in the pass market for a proposal'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'sellInPassMarket' or 'buyInFailMarket', which would require mentioning the specific market type or contrasting actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'sellInPassMarket' or 'buyInFailMarket'. It lacks context about prerequisites (e.g., proposal status) or scenarios where buying in the pass market is appropriate, offering only a basic statement of function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createProposalC
Create a new proposal for a DAO
| Name | Required | Description | Default |
|---|---|---|---|
| daoId | Yes | The ID of the DAO to create a proposal for | |
| descriptionUrl | Yes | URL to the proposal description | |
| baseTokensToLP | Yes | Amount of base tokens to LP | |
| quoteTokensToLP | Yes | Amount of quote tokens to LP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't address permissions required, whether this is an irreversible action, rate limits, or what happens upon success/failure. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool that creates proposals with 4 required parameters and no annotations or output schema, the description is insufficient. It doesn't explain what constitutes a valid proposal, what happens after creation, or potential side effects. The context demands more comprehensive guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter information beyond what's already in the schema descriptions. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new proposal') and target resource ('for a DAO'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from potential sibling tools that might also create proposals in different contexts, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, prerequisites, or contextual constraints. With sibling tools like getProposal and getProposals existing, there's no indication of when creation versus retrieval is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getDaoC
Get a specific DAO by ID
| Name | Required | Description | Default |
|---|---|---|---|
| daoId | Yes | The ID of the DAO to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states a read operation ('Get') but doesn't disclose behavioral traits such as error handling, authentication needs, rate limits, or what happens if the DAO ID is invalid. This leaves significant gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste, front-loading the core purpose. It's appropriately sized for a simple retrieval tool, earning full marks for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain return values, error cases, or behavioral context, which are crucial for a tool with zero structured coverage beyond the input parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter 'daoId' fully. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a specific DAO by ID'), making the purpose understandable. However, it doesn't differentiate from sibling 'getDaos' which likely retrieves multiple DAOs, missing explicit sibling distinction that would warrant a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'getDaos' for listing multiple DAOs or other tools for proposal-related operations. The description implies usage for retrieving a single DAO but lacks explicit when/when-not instructions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getDaosB
Get all DAOs from the Futarchy system
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'Get all DAOs' but doesn't disclose behavioral traits like whether this is a read-only operation, if it requires authentication, how results are returned (e.g., pagination, format), or potential rate limits. The description is minimal and lacks critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for a simple tool, making it easy to parse without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'all DAOs' entails (e.g., scope, format, limitations) or provide context about the Futarchy system. For a tool with no structured support, more detail is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details beyond the schema, but this is appropriate given the absence of parameters. A baseline of 4 is applied as it adequately handles the zero-parameter case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all DAOs') and resource ('from the Futarchy system'), providing a specific verb+resource combination. However, it doesn't differentiate from its sibling 'getDao' (singular), which presumably retrieves a single DAO, leaving some ambiguity about when to use each tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'getDao' (singular) or other sibling tools. It lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProposalC
Get a specific proposal by ID
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | The ID of the proposal to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Get') but doesn't clarify if this is a read-only operation, what permissions are required, how errors are handled (e.g., invalid ID), or the response format. This leaves critical behavioral traits unspecified for a retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with zero waste—'Get a specific proposal by ID'—making it highly concise and front-loaded. Every word contributes to understanding the tool's core function without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simple retrieval) but lack of annotations and output schema, the description is incomplete. It doesn't explain what a 'proposal' entails in this context, potential return values, or error cases. For a tool with no structured output information, more context is needed to ensure proper usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the parameter 'proposalId' clearly documented in the schema. The description adds no additional meaning beyond implying retrieval by ID, which is already covered. This meets the baseline score of 3, as the schema adequately handles parameter semantics without extra description needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a specific proposal by ID'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'getProposals' (plural) or 'getProposalSentiment', which might retrieve multiple proposals or sentiment data respectively, leaving room for confusion about when to use this exact tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'getProposals' for listing multiple proposals or 'getProposalSentiment' for sentiment data, nor does it specify prerequisites such as needing a valid proposal ID. This lack of context could lead to incorrect tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProposalsC
Get all proposals for a specific DAO
| Name | Required | Description | Default |
|---|---|---|---|
| daoId | Yes | The ID of the DAO to get proposals for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Get all proposals') but does not describe key behaviors such as whether this is a read-only operation, if it requires authentication, how results are returned (e.g., pagination, sorting), or potential rate limits. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is front-loaded with the core purpose ('Get all proposals for a specific DAO'), making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a tool that retrieves multiple proposals, the lack of annotations and output schema means the description is incomplete. It does not cover behavioral aspects like response format, error handling, or usage context, which are crucial for an agent to use the tool effectively in a real-world scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'daoId' parameter clearly documented. The description adds no additional meaning beyond what the schema provides, such as explaining what a DAO ID format looks like or providing examples. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('all proposals for a specific DAO'), making the purpose understandable. However, it does not explicitly differentiate from sibling tools like 'getProposal' (singular) or 'getDaos', which reduces specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it does not clarify if this should be used for listing proposals versus retrieving a single proposal with 'getProposal', or when to use it in relation to other DAO-related tools like 'getDao' or 'getDaos'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProposalSentimentC
Get sentiment analysis for a specific proposal based on Discord and Twitter data
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | The ID of the proposal to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool performs sentiment analysis using Discord and Twitter data, but doesn't describe key behaviors: what the sentiment output looks like (e.g., scores, categories), whether it's a read-only operation, potential rate limits, data freshness, or error handling. For a tool with no annotations, this leaves significant gaps in understanding its operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that efficiently conveys the core functionality without unnecessary words. It's front-loaded with the main action and resource, making it easy to parse. Every part of the sentence earns its place by specifying the tool's purpose and data sources.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of sentiment analysis and the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., sentiment scores, aggregated metrics, or raw data), how the analysis is performed, or any limitations. For a tool that likely outputs structured sentiment data, this omission makes it hard for an agent to use effectively without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with 'proposalId' documented as 'The ID of the proposal to analyze.' The description doesn't add any parameter-specific details beyond this, such as format examples or constraints. Since the schema already provides adequate parameter information, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get sentiment analysis for a specific proposal based on Discord and Twitter data.' It specifies the verb ('Get sentiment analysis'), resource ('specific proposal'), and data sources ('Discord and Twitter data'). However, it doesn't explicitly differentiate from sibling tools like 'getProposal' or 'getProposals,' which might also retrieve proposal information but without sentiment analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing a valid proposal ID, or contrast it with siblings like 'getProposal' (which might fetch basic proposal details) or 'getProposals' (which might list multiple proposals). There's no explicit when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sellInFailMarketC
Sell tokens in the fail market for a proposal
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | The ID of the proposal to trade in | |
| amount | Yes | Amount to sell | |
| user | Yes | User's public key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't mention if this is a destructive/mutative operation, requires authentication, has rate limits, or what happens upon execution (e.g., token transfer, market impact).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without unnecessary words or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the outcome (e.g., what 'sell' entails, return values, or error conditions), leaving gaps in understanding for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional meaning beyond implying 'proposalId' relates to a proposal in the fail market, but this is minimal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('sell tokens') and the context ('in the fail market for a proposal'), which is specific and actionable. However, it doesn't explicitly differentiate from its sibling 'sellInPassMarket', which would be needed for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'sellInPassMarket' or 'buyInFailMarket'. It lacks context about prerequisites, such as needing a proposal in a 'fail' state or having tokens to sell.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sellInPassMarketC
Sell tokens in the pass market for a proposal
| Name | Required | Description | Default |
|---|---|---|---|
| proposalId | Yes | The ID of the proposal to trade in | |
| amount | Yes | Amount to sell | |
| user | Yes | User's public key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool sells tokens, implying a write/mutation operation, but does not disclose any behavioral traits such as permissions needed, rate limits, side effects, or what happens upon execution. This is a significant gap for a tool that likely involves financial transactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a token-selling operation with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits, usage context, and expected outcomes, leaving critical gaps for an AI agent to understand how to invoke this tool safely and effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, providing clear documentation for all three parameters. The description does not add any additional meaning or context beyond what the schema already specifies, such as explaining the relationship between parameters or usage nuances. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('sell tokens') and the context ('in the pass market for a proposal'), which is specific and actionable. However, it does not explicitly distinguish this tool from its sibling 'sellInFailMarket', which likely sells tokens in a different market context, leaving some ambiguity in sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as 'sellInFailMarket' or 'buyInPassMarket'. It lacks context on prerequisites, conditions, or exclusions, leaving the agent to infer usage based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v1.0.0- Changed
getDaos1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
10 tool updates
- First observed
buyInFailMarket - First observed
buyInPassMarket - First observed
createProposal - First observed
getDao - First observed
getDaos - First observed
getProposal - First observed
getProposals - First observed
getProposalSentiment - First observed
sellInFailMarket - First observed
sellInPassMarket
TDQS
Every tool has a clearly distinct purpose with no ambiguity. Tools are clearly separated into DAO operations (getDao, getDaos), proposal operations (createProposal, getProposal, getProposals), market operations (buy/sell in pass/fail markets), and sentiment analysis (getProposalSentiment). The descriptions make it immediately clear which tool to use for each specific action.
All tools follow a consistent verb_noun pattern throughout. The naming convention is perfectly uniform with clear action prefixes (buyIn, sellIn, create, get) followed by specific objects (FailMarket, PassMarket, Proposal, Dao, ProposalSentiment). There are no deviations in style or convention across the entire toolset.
With 10 tools, this is well-scoped for a Futarchy system. Each tool earns its place by covering distinct aspects of the domain: DAO management, proposal lifecycle, market trading operations, and sentiment analysis. The count is appropriate for the apparent scope without being overwhelming or insufficient.
The tool surface provides complete CRUD/lifecycle coverage for the Futarchy domain. It covers DAO discovery (getDaos, getDao), proposal creation and retrieval (createProposal, getProposal, getProposals), market operations for both pass and fail outcomes (buy/sell), and even sentiment analysis. There are no obvious gaps or dead ends for agents working with this system.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Curated marketplace of real-world data APIs for AI agents, paid per call in USDC on Solana.
Non-custodial DeFi tools for AI agents on Solana: swaps, perps, lending, staking, equities.
Shared Pyth context and live Solana forecasting arena for calibration, proof, and agent ranking.
Native Solana staking for AI agents. 26 MCP tools, one-shot signing, webhooks.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA server that allows AI agents to interact with the Tally API to access DAO governance data, proposals, and metadata using Model Context Protocol (MCP), built with TypeScript and GraphQL.197MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server enabling AI agents to interact with the Solana blockchain for DeFi operations like checking balances, transferring tokens, executing swaps, and fetching price data.2922MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI models to interact with the Solana blockchain, providing RPC methods, wallet management, DeFi trading capabilities, and Helius API integration for enhanced Solana development.5MIT
- AlicenseNot gradedqualityDmaintenanceA Solana blockchain interaction server that allows AI tools to query blockchain data using natural language, access structured token information, and generate human-readable explanations of complex blockchain concepts.6MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tanmay4l/FutarchyMCPServer'
If you have feedback or need assistance with the MCP directory API, please join our Discord server