Skip to main content
Glama

build_context

Retrieve conversation history from memory URLs to maintain context and enable natural follow-ups on previous discussions or related topics.

Instructions

Build context from a memory:// URI to continue conversations naturally.

Use this to follow up on previous discussions or explore related topics.

Memory URL Format:
- Use paths like "folder/note" or "memory://folder/note"
- Pattern matching: "folder/*" matches all notes in folder
- Valid characters: letters, numbers, hyphens, underscores, forward slashes
- Avoid: double slashes (//), angle brackets (<>), quotes, pipes (|)
- Examples: "specs/search", "projects/basic-memory", "notes/*"

Timeframes support natural language like:
- "2 days ago", "last week", "today", "3 months ago"
- Or standard formats like "7d", "24h"

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
projectNo
depthNo
timeframeNo7d
pageNo
page_sizeNo
max_relatedNo

Implementation Reference

  • The build_context tool implementation, including @mcp.tool() registration decorator and the full async handler function that builds graph context from memory URLs by calling the backend API.
    @mcp.tool(
        description="""Build context from a memory:// URI to continue conversations naturally.
    
        Use this to follow up on previous discussions or explore related topics.
    
        Memory URL Format:
        - Use paths like "folder/note" or "memory://folder/note"
        - Pattern matching: "folder/*" matches all notes in folder
        - Valid characters: letters, numbers, hyphens, underscores, forward slashes
        - Avoid: double slashes (//), angle brackets (<>), quotes, pipes (|)
        - Examples: "specs/search", "projects/basic-memory", "notes/*"
    
        Timeframes support natural language like:
        - "2 days ago", "last week", "today", "3 months ago"
        - Or standard formats like "7d", "24h"
        """,
    )
    async def build_context(
        url: MemoryUrl,
        project: Optional[str] = None,
        depth: str | int | None = 1,
        timeframe: Optional[TimeFrame] = "7d",
        page: int = 1,
        page_size: int = 10,
        max_related: int = 10,
        context: Context | None = None,
    ) -> GraphContext:
        """Get context needed to continue a discussion within a specific project.
    
        This tool enables natural continuation of discussions by loading relevant context
        from memory:// URIs. It uses pattern matching to find relevant content and builds
        a rich context graph of related information.
    
        Project Resolution:
        Server resolves projects in this order: Single Project Mode → project parameter → default project.
        If project unknown, use list_memory_projects() or recent_activity() first.
    
        Args:
            project: Project name to build context from. Optional - server will resolve using hierarchy.
                    If unknown, use list_memory_projects() to discover available projects.
            url: memory:// URI pointing to discussion content (e.g. memory://specs/search)
            depth: How many relation hops to traverse (1-3 recommended for performance)
            timeframe: How far back to look. Supports natural language like "2 days ago", "last week"
            page: Page number of results to return (default: 1)
            page_size: Number of results to return per page (default: 10)
            max_related: Maximum number of related results to return (default: 10)
            context: Optional FastMCP context for performance caching.
    
        Returns:
            GraphContext containing:
                - primary_results: Content matching the memory:// URI
                - related_results: Connected content via relations
                - metadata: Context building details
    
        Examples:
            # Continue a specific discussion
            build_context("my-project", "memory://specs/search")
    
            # Get deeper context about a component
            build_context("work-docs", "memory://components/memory-service", depth=2)
    
            # Look at recent changes to a specification
            build_context("research", "memory://specs/document-format", timeframe="today")
    
            # Research the history of a feature
            build_context("dev-notes", "memory://features/knowledge-graph", timeframe="3 months ago")
    
        Raises:
            ToolError: If project doesn't exist or depth parameter is invalid
        """
        track_mcp_tool("build_context")
        logger.info(f"Building context from {url} in project {project}")
    
        # Convert string depth to integer if needed
        if isinstance(depth, str):
            try:
                depth = int(depth)
            except ValueError:
                from mcp.server.fastmcp.exceptions import ToolError
    
                raise ToolError(f"Invalid depth parameter: '{depth}' is not a valid integer")
    
        # URL is already validated and normalized by MemoryUrl type annotation
    
        async with get_client() as client:
            # Get the active project using the new stateless approach
            active_project = await get_active_project(client, project, context)
    
            response = await call_get(
                client,
                f"/v2/projects/{active_project.external_id}/memory/{memory_url_path(url)}",
                params={
                    "depth": depth,
                    "timeframe": timeframe,
                    "page": page,
                    "page_size": page_size,
                    "max_related": max_related,
                },
            )
            return GraphContext.model_validate(response.json())
  • Input schema for the 'url' parameter: MemoryUrl type alias with validation, normalization, and constraints for memory:// URLs.
    MemoryUrl = Annotated[
        str,
        BeforeValidator(str.strip),  # Clean whitespace
        BeforeValidator(normalize_memory_url),  # Validate and normalize the URL
        MinLen(1),
        MaxLen(2028),
    ]
  • Output schema for the build_context tool: GraphContext Pydantic model containing hierarchical results, metadata, pagination.
    class GraphContext(BaseModel):
        """Complete context response."""
    
        # hierarchical results
        results: Sequence[ContextResult] = Field(
            description="Hierarchical results with related items nested", default_factory=list
        )
    
        # Context metadata
        metadata: MemoryMetadata
    
        page: Optional[int] = None
        page_size: Optional[int] = None
  • Helper function memory_url_path used in the handler to extract path from MemoryUrl for API call.
    def memory_url_path(url: memory_url) -> str:  # pyright: ignore
        """
        Returns the uri for a url value by removing the prefix "memory://" from a given MemoryUrl.
    
        This function processes a given MemoryUrl by removing the "memory://"
        prefix and returns the resulting string. If the provided url does not
        begin with "memory://", the function will simply return the input url
        unchanged.
    
        :param url: A MemoryUrl object representing the URL with a "memory://" prefix.
        :type url: MemoryUrl
        :return: A string representing the URL with the "memory://" prefix removed.
        :rtype: str
        """
        return url.removeprefix("memory://")

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/basicmachines-co/basic-memory'

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