Skip to main content
Glama
hichana

Goal Story MCP Server

by hichana

goalstory_read_goals

Retrieve user goal journey overview with pagination support to navigate and manage large goal sets effectively. Enhances goal tracking by organizing and displaying progress systematically.

Instructions

Get an overview of the user's goal journey, with optional pagination to manage larger sets of goals.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of goals to return per page.
pageNoPage number for viewing subsets of goals (starts at 1).

Implementation Reference

  • The core handler implementation for the 'goalstory_read_goals' tool. It registers the tool with MCP server, uses the schema from tools.ts, constructs a paginated GET request to the /goals API endpoint using doRequest helper, and returns the formatted JSON response as text content.
    server.tool( READ_GOALS_TOOL.name, READ_GOALS_TOOL.description, READ_GOALS_TOOL.inputSchema.shape, async (args) => { const params = new URLSearchParams(); if (args.page) params.set("page", `${args.page}`); if (args.limit) params.set("limit", `${args.limit}`); const url = `${GOALSTORY_API_BASE_URL}/goals?${params.toString()}`; const result = await doRequest(url, "GET"); return { content: [ { type: "text", text: `Goals retrieved:\n${JSON.stringify(result, null, 2)}`, }, ], isError: false, }; }, );
  • Zod input schema definition and tool metadata (name, description) for 'goalstory_read_goals', imported and used in index.ts for registration.
    export const READ_GOALS_TOOL = { name: "goalstory_read_goals", description: "Get an overview of the user's goal journey, with optional pagination to manage larger sets of goals.", inputSchema: z.object({ page: z .number() .optional() .describe("Page number for viewing subsets of goals (starts at 1)."), limit: z .number() .optional() .describe("Maximum number of goals to return per page."), }), };
  • TypeScript interface defining the input shape for 'goalstory_read_goals' tool.
    export interface GoalstoryReadGoalsInput { page?: number; limit?: number; }
  • Helper function doRequest used by all tool handlers, including goalstory_read_goals, to make authenticated HTTP requests to the GoalStory API with timeout and comprehensive error handling.
    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