Skip to main content
Glama

think

Capture and organize development thoughts by category and depth for structured analysis. Enables hierarchical reference and review within agile workflows.

Instructions

Record a thought for later reference and analysis.

This tool allows you to record thoughts during development or analysis processes. Thoughts can be organized by category and depth to create a hierarchical structure of analysis.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
categoryNodefault
depthNo
metadataNo
referencesNo
thoughtYes
timestampNo

Implementation Reference

  • MCP registration (@mcp.tool()), schema (function parameters with descriptions), and wrapper handler for the 'think' tool. Delegates to think_impl from think_tool.py.
    @mcp.tool()
    def think(
        thought: str,
        category: str = "default",
        depth: int = 0,
        timestamp: Optional[int] = None,
        references: Optional[List[str]] = None,
        metadata: Optional[Dict[str, Any]] = None,
    ) -> str:
        """
        Record a thought for later reference and analysis.
    
        This tool allows you to record thoughts during development or analysis processes.
        Thoughts can be organized by category and depth to create a hierarchical structure
        of analysis.
        """
        # Extract actual values if they're Field objects
        if hasattr(thought, "default"):
            thought = thought.default
        if hasattr(category, "default"):
            category = category.default
        if hasattr(depth, "default"):
            depth = depth.default
        if hasattr(timestamp, "default"):
            timestamp = timestamp.default
        if hasattr(references, "default"):
            references = references.default
        if hasattr(metadata, "default"):
            metadata = metadata.default
    
        result = think_impl(thought, category, depth, None)
        # Convert dict to formatted JSON string
        return json.dumps(result, indent=2)
  • Core handler function that implements the logic for recording a thought, creating a thought record, storing it via _storage, and returning success response.
    def think(
        thought: str,
        category: Optional[str] = None,
        depth: int = 1,
        previous_thought_id: Optional[int] = None,
    ) -> Dict[str, Any]:
        """Record a thought."""
        thought_id = len(_storage.get_thoughts()) + 1
        timestamp = datetime.now().isoformat()
    
        thought_record = {
            "thought_id": thought_id,
            "id": thought_id,  # Alias for backward compatibility
            "index": thought_id,  # Another alias used in some tests
            "thought": thought,
            "timestamp": timestamp,
            "category": category,
            "depth": depth,
            "previous_thought_id": previous_thought_id,
        }
    
        _storage.add_thought(thought_record)
    
        message = f"Thought recorded with ID {thought_id}"
        if category:
            message += f" in category '{category}'"
        if depth > 1:
            message += f" at depth {depth} (deeper analysis)"
        if depth > 2:
            message = message.replace("deeper analysis", "much deeper analysis")
    
        return {"success": True, "thought_id": thought_id, "message": message}
  • ThoughtStorage class: helper utility for persisting thoughts to a temporary JSON file.
    class ThoughtStorage:
        def __init__(self):
            self._storage_file = None
            self._thoughts = []
            self._init_storage()
    
        def _init_storage(self):
            """Initialize temporary file for thought storage."""
            temp = tempfile.NamedTemporaryFile(prefix="mcp_thoughts_", suffix=".tmp", delete=False)
            self._storage_file = temp.name
            temp.close()
            logger.debug(f"Initialized thought storage using temporary file: {self._storage_file}")
    
        def add_thought(self, thought: Dict[str, Any]):
            """Add a thought to storage."""
            self._thoughts.append(thought)
            self._save()
    
        def get_thoughts(self) -> List[Dict[str, Any]]:
            """Get all stored thoughts."""
            return self._thoughts
    
        def clear_thoughts(self, category: Optional[str] = None):
            """Clear stored thoughts, optionally by category."""
            if category:
                self._thoughts = [t for t in self._thoughts if t.get("category") != category]
            else:
                self._thoughts = []
            self._save()
    
        def _save(self):
            """Save thoughts to storage file."""
            with open(self._storage_file, "w") as f:
                json.dump(self._thoughts, f)

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/smian0/mcp-agile-flow'

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