Skip to main content
Glama

getProposals

Retrieve governance proposals from a Snapshot space to analyze voting activity, filter by state, and track decision-making processes.

Instructions

Get proposals for a Snapshot space

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
spaceIdYesID of the space
stateNoFilter by proposal state (active, closed, pending, all)
limitNoNumber of proposals to fetch

Implementation Reference

  • MCP tool handler for 'getProposals': parses arguments using ProposalsParamsSchema, calls snapshotService.getProposals with spaceId, state, and limit, and returns the proposals as JSON text content.
    case "getProposals": {
      const parsedArgs = ProposalsParamsSchema.parse(args);
      const proposals = await this.snapshotService.getProposals(
        parsedArgs.spaceId,
        parsedArgs.state || "all",
        parsedArgs.limit || 20
      );
      return {
        content: [{
          type: "text",
          text: JSON.stringify(proposals, null, 2)
        }]
      };
    }
  • Zod schema (ProposalsParamsSchema) for input validation of getProposals tool: requires spaceId, optional state and limit.
    const ProposalsParamsSchema = z.object({
      spaceId: z.string(),
      state: z.string().optional(),
      limit: z.number().optional()
    });
  • src/server.ts:80-92 (registration)
    Tool registration in listTools handler: defines 'getProposals' with description and inputSchema matching the Zod schema.
    {
      name: "getProposals",
      description: "Get proposals for a Snapshot space",
      inputSchema: {  // Changed from parameters to inputSchema
        type: "object",
        properties: {
          spaceId: { type: "string", description: "ID of the space" },
          state: { type: "string", description: "Filter by proposal state (active, closed, pending, all)" },
          limit: { type: "number", description: "Number of proposals to fetch" }
        },
        required: ["spaceId"]
      }
    },
  • Core implementation of getProposals in SnapshotService: constructs and executes GraphQL query to fetch proposals for a space, filtered by state if specified, returns Proposal[].
    async getProposals(spaceId: string, state: string = "all", first: number = 20): Promise<Proposal[]> {
      const query = `
        query Proposals {
          proposals (
            first: ${first},
            skip: 0,
            where: {
              space_in: ["${spaceId}"]
              ${state !== "all" ? `, state: "${state}"` : ''}
            },
            orderBy: "created",
            orderDirection: desc
          ) {
            id
            title
            body
            choices
            start
            end
            snapshot
            state
            author
            space {
              id
              name
            }
          }
        }
      `;
    
      const result = await this.queryGraphQL(query);
      return result.proposals;
    }
  • TypeScript interface Proposal defining the structure of proposal objects returned by getProposals.
    interface Proposal {
      id: string;
      title: string;
      body?: string;
      choices: string[];
      start: number;
      end: number;
      snapshot: string;
      state: string;
      author: string;
      space: {
        id: string;
        name: string;
      };
    }

Latest Blog Posts

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/crazyrabbitLTC/mcp-snapshot-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server