Skip to main content
Glama
hichana

Goal Story MCP Server

by hichana

goalstory_update_step

Update step details like name, status, evidence, and outcome to track progress and insights in goal management.

Instructions

Update step details including the name, completion status, evidence, and outcome. Use this to track progress and insights.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesUnique identifier of the step to update.
nameNoRefined or clarified step description.
statusNoStep completion status: 0 = pending/in progress, 1 = completed.
outcomeNoResults and impact achieved through completing this step.
evidenceNoConcrete proof or observations of step completion.

Implementation Reference

  • The MCP tool handler implementation for 'goalstory_update_step'. It makes a PATCH request to the backend API at /steps/{id} with the provided updates (name, status, outcome, evidence) and returns the formatted response.
    UPDATE_STEP_TOOL.description, UPDATE_STEP_TOOL.inputSchema.shape, async (args) => { const url = `${GOALSTORY_API_BASE_URL}/steps/${args.id}`; const body = { id: args.id, ...(args.name ? { name: args.name } : {}), ...(typeof args.status === "number" ? { status: args.status } : {}), ...(args.outcome ? { outcome: args.outcome } : {}), ...(args.evidence ? { evidence: args.evidence } : {}), }; const result = await doRequest(url, "PATCH", body); return { content: [ { type: "text", text: `Step updated:\n${JSON.stringify(result, null, 2)}`, }, ], isError: false, }; }, ); /**
  • The tool definition object containing name, description, and Zod inputSchema used for registration and validation.
    export const UPDATE_STEP_TOOL = { name: "goalstory_update_step", description: "Update step details including the name, completion status, evidence, and outcome. Use this to track progress and insights.", inputSchema: z.object({ id: z.string().describe("Unique identifier of the step to update."), name: z .string() .optional() .describe("Refined or clarified step description."), status: z .number() .optional() .describe( "Step completion status: 0 = pending/in progress, 1 = completed.", ), outcome: z .string() .optional() .describe("Results and impact achieved through completing this step."), evidence: z .string() .optional() .describe("Concrete proof or observations of step completion."), }), };
  • TypeScript interface defining the input parameters for updating a goal story step.
    export interface GoalstoryUpdateStepInput { id: string; name?: string; status?: number; // 0=Pending, 1=Complete outcome?: string; evidence?: string; notes?: string; }
  • src/index.ts:42-43 (registration)
    Import of the UPDATE_STEP_TOOL constant used to register the tool handler.
    UPDATE_STEP_TOOL, } from "./tools.js";
  • Shared helper function doRequest used by all tool handlers to make authenticated HTTP requests to the backend API.
    async function doRequest<T = any>( url: string, method: string, body?: unknown, ): Promise<T> { console.error("Making request to:", url); console.error("Method:", method); console.error("Body:", body ? JSON.stringify(body) : "none"); try { const response = await axios({ url, method, headers: { "Content-Type": "application/json", Authorization: `Bearer ${GOALSTORY_API_TOKEN}`, }, data: body, timeout: 10000, // 10 second timeout validateStatus: function (status) { return status >= 200 && status < 500; // Accept all status codes less than 500 }, }); console.error("Response received:", response.status); return response.data as T; } catch (err) { console.error("Request failed with error:", err); if (axios.isAxiosError(err)) { if (err.code === "ECONNABORTED") { throw new Error( `Request timed out after 10 seconds. URL: ${url}, Method: ${method}`, ); } if (err.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx throw new Error( `HTTP Error ${ err.response.status }. URL: ${url}, Method: ${method}, Body: ${JSON.stringify( body, )}. Error text: ${JSON.stringify(err.response.data)}`, ); } else if (err.request) { // The request was made but no response was received throw new Error( `No response received from server. URL: ${url}, Method: ${method}`, ); } else { // Something happened in setting up the request that triggered an Error throw new Error(`Request setup failed: ${err.message}`); } } else { // Something else happened throw new Error( `Unexpected error: ${err instanceof Error ? err.message : String(err)}`, ); } } }

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