Skip to main content
Glama
hichana

Goal Story MCP Server

by hichana

goalstory_create_steps

Break down goals into clear, actionable steps through structured discussion, then present them for review to ensure they're achievable before saving.

Instructions

Formulate actionable steps for a goal through thoughtful discussion. Present the steps for user review either before or after saving, ensuring they're clear and achievable. Confirm if any refinements are needed. IMPORTANT: Steps are ordered by their 'order_ts' timestamp in ascending order - the step with the earliest timestamp becomes step 1, and steps with later timestamps follow in sequence. The first item in your array will receive the earliest timestamp (becoming step 1), and subsequent items will receive progressively later timestamps. NOTE: Array order determines step sequence - first array item = step 1, second array item = step 2, etc.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
goal_idYesUnique identifier of the goal these steps will help achieve.
stepsYesList of clear, actionable step descriptions in sequence. The first item in this array will become step 1, the second will become step 2, and so on based on timestamp ordering.

Implementation Reference

  • The execution handler for the 'goalstory_create_steps' tool. It handles input args, converts steps if string (for local dev), makes POST to /steps endpoint, and returns formatted response with note on ordering.
    async (args) => { const url = `${GOALSTORY_API_BASE_URL}/steps`; // when developing locally, we can pass in a list of strings in the MCP // inspector like this: step1, step2 let steps = args.steps; if (typeof steps === "string") { const itemsAreAString = steps as string; steps = itemsAreAString .split(",") .map((s) => s.trim()) .filter((s) => s.length > 0); } const body = { goal_id: args.goal_id, steps, }; const result = await doRequest(url, "POST", body); return { content: [ { type: "text", text: `Steps created:\n${JSON.stringify(result, null, 2)}\n\nNOTE: Steps are ordered by their 'order_ts' timestamp in ascending order - the step with the smallest timestamp value (updated first) is step 1. The steps appear in order, with the first step having the smallest timestamp. Example: If step A has timestamp 12:00 and step B has timestamp 12:01, then step A is step 1 and step B is step 2.`, }, ], isError: false, }; },
  • Tool definition including name, description, and Zod input schema for validating goal_id (string) and steps (array of strings). Used in registration.
    export const CREATE_STEPS_TOOL = { name: "goalstory_create_steps", description: `Formulate actionable steps for a goal through thoughtful discussion. Present the steps for user review either before or after saving, ensuring they're clear and achievable. Confirm if any refinements are needed. IMPORTANT: Steps are ordered by their 'order_ts' timestamp in ascending order - the step with the earliest timestamp becomes step 1, and steps with later timestamps follow in sequence. The first item in your array will receive the earliest timestamp (becoming step 1), and subsequent items will receive progressively later timestamps. NOTE: Array order determines step sequence - first array item = step 1, second array item = step 2, etc.`, inputSchema: z.object({ goal_id: z .string() .describe("Unique identifier of the goal these steps will help achieve."), steps: z .array(z.string()) .describe( "List of clear, actionable step descriptions in sequence. The first item in this array will become step 1, the second will become step 2, and so on based on timestamp ordering.", ), }), };
  • src/index.ts:445-479 (registration)
    MCP server registration of the tool using server.tool() with name from CREATE_STEPS_TOOL, description, inputSchema.shape, and custom handler function.
    server.tool( CREATE_STEPS_TOOL.name, CREATE_STEPS_TOOL.description, CREATE_STEPS_TOOL.inputSchema.shape, async (args) => { const url = `${GOALSTORY_API_BASE_URL}/steps`; // when developing locally, we can pass in a list of strings in the MCP // inspector like this: step1, step2 let steps = args.steps; if (typeof steps === "string") { const itemsAreAString = steps as string; steps = itemsAreAString .split(",") .map((s) => s.trim()) .filter((s) => s.length > 0); } const body = { goal_id: args.goal_id, steps, }; const result = await doRequest(url, "POST", body); return { content: [ { type: "text", text: `Steps created:\n${JSON.stringify(result, null, 2)}\n\nNOTE: Steps are ordered by their 'order_ts' timestamp in ascending order - the step with the smallest timestamp value (updated first) is step 1. The steps appear in order, with the first step having the smallest timestamp. Example: If step A has timestamp 12:00 and step B has timestamp 12:01, then step A is step 1 and step B is step 2.`, }, ], isError: false, }; }, );
  • TypeScript interface defining the input shape for the tool, matching the Zod schema.
    export interface GoalstoryCreateStepsInput { goal_id: string; steps: 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/hichana/goalstory-mcp'

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