think
Record and manage thoughts by logging them into the system for future reference. Use the Local Utilities MCP Server to integrate thought tracking with other local system utilities for streamlined productivity.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| thought | Yes | The thought content to record |
Implementation Reference
- src/mcp/think.ts:70-81 (handler)Handler function for the 'think' tool. Records the input thought with a timestamp in a closure-stored array and returns a success message.async ({ thought }) => { thoughts.push({ timestamp: new Date().toISOString(), content: thought }); return { content: [{ type: "text", text: "Thought recorded successfully" }] }; }
- src/mcp/think.ts:67-82 (registration)Registers the 'think' tool on the MCP server with input schema and handler.server.tool( "think", { thought: z.string().min(1, "Thought cannot be empty").describe("The thought content to record") }, async ({ thought }) => { thoughts.push({ timestamp: new Date().toISOString(), content: thought }); return { content: [{ type: "text", text: "Thought recorded successfully" }] }; } );
- src/mcp/think.ts:69-69 (schema)Zod schema for the 'think' tool input: a non-empty string for the thought content.{ thought: z.string().min(1, "Thought cannot be empty").describe("The thought content to record") },
- src/index.ts:25-25 (registration)Calls registerThinkTool to register the think tool (and related tools) on the main MCP server instance.registerThinkTool(server);
- src/mcp/think.ts:20-60 (helper)Helper class with methods for managing thoughts, exported for testing but not used in the actual tool handler (which uses closure state).export class ThinkToolInternalLogic { thoughts: Thought[] = []; // Make public for test access if needed, or add methods addThought(content: string): void { this.thoughts.push({ timestamp: new Date().toISOString(), content }); } getAllThoughts(): Thought[] { return [...this.thoughts]; } clearThoughts(): void { this.thoughts = []; } getThoughtStats(): ThoughtStats { const totalThoughts = this.thoughts.length; if (totalThoughts === 0) { return { totalThoughts: 0, averageLength: 0, oldestThought: null, newestThought: null }; } const averageLength = this.thoughts.reduce((acc, thought) => acc + thought.content.length, 0) / totalThoughts; return { totalThoughts, averageLength: parseFloat(averageLength.toFixed(2)), // Keep formatted oldestThought: this.thoughts[0].timestamp, newestThought: this.thoughts[this.thoughts.length - 1].timestamp }; } }