Skip to main content
Glama

search_project

Search your project knowledge base for solutions, patterns, and architecture decisions using your private entries and public community knowledge.

Instructions

Search project hive for knowledge. TRIGGERS: 'search my hive for [topic]', 'search hive [query]', 'find in hive [topic]', 'what does my hive know about [topic]'. Searches your private entries + optionally public entries. Returns relevant solutions, patterns, architecture decisions, etc.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
user_idNoOptional: User ID (auto-detected from .user_id in cwd if not provided)
queryYesSearch query
project_idNoOptional: limit to specific project
include_publicNoInclude public entries in results (default: true)
project_pathNoOptional: Project directory path (required for local storage)

Implementation Reference

  • Core implementation of the search_project tool handler. Performs local keyword search on .hive.json for local storage or forwards to cloud Supabase API for cloud storage.
    export async function searchProject(
      userId: string | null,
      query: string,
      projectId?: string,
      includePublic: boolean = true,
      projectPath?: string
    ): Promise<SearchProjectResult> {
      // Auto-detect user_id if not provided
      if (!userId) {
        userId = await getUserId(projectPath);
        if (!userId) {
          throw new Error('No .user_id file found. Run init_hive first.');
        }
      }
    
      // Check if local storage
      if (userId.startsWith('local-') && projectPath) {
        const hive = await readLocalHive(projectPath);
        if (!hive) {
          return { query, results: [], count: 0, source: 'local (not found)' };
        }
    
        // Simple search: filter entries by query keywords
        const queryLower = query.toLowerCase();
        const results = hive.entries.filter(entry =>
          entry.query.toLowerCase().includes(queryLower) ||
          entry.solution.toLowerCase().includes(queryLower) ||
          entry.category.toLowerCase().includes(queryLower)
        ).map(entry => ({
          query: entry.query,
          solution: entry.solution,
          category: entry.category,
          created_at: entry.created_at
        }));
    
        return {
          query,
          results,
          count: results.length,
          source: `local:${projectId}`
        };
      }
    
      // Cloud storage - use API
      const response = await fetch(`${API_BASE}/search-project`, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          user_id: userId,
          query,
          project_id: projectId,
          include_public: includePublic
        }),
      });
    
      if (!response.ok) {
        throw new Error(`Search project failed: ${response.statusText}`);
      }
    
      return response.json();
    }
  • Input schema and metadata definition for the search_project tool, registered in the MCP ListTools response.
    {
      name: "search_project",
      description:
        "Search project hive for knowledge. TRIGGERS: 'search my hive for [topic]', 'search hive [query]', 'find in hive [topic]', 'what does my hive know about [topic]'. Searches your private entries + optionally public entries. Returns relevant solutions, patterns, architecture decisions, etc.",
      inputSchema: {
        type: "object",
        properties: {
          user_id: {
            type: "string",
            description: "Optional: User ID (auto-detected from .user_id in cwd if not provided)",
          },
          query: {
            type: "string",
            description: "Search query",
          },
          project_id: {
            type: "string",
            description: "Optional: limit to specific project",
          },
          include_public: {
            type: "boolean",
            description: "Include public entries in results (default: true)",
          },
          project_path: {
            type: "string",
            description: "Optional: Project directory path (required for local storage)",
          },
        },
        required: ["query"],
      },
    },
  • src/index.ts:434-445 (registration)
    Tool dispatch registration in the MCP CallToolRequestSchema handler switch statement.
    case "search_project": {
      const result = await searchProject(
        args?.user_id as string,
        args?.query as string,
        args?.project_id as string | undefined,
        args?.include_public as boolean | undefined,
        args?.project_path as string | undefined
      );
      return {
        content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
      };
    }
  • TypeScript interface defining the output structure of the search_project tool.
    interface SearchProjectResult {
      query: string;
      results: any[];
      count: number;
      source: string;
  • Helper function to read local hive data from .hive.json file, used in local storage search.
    async function readLocalHive(projectPath: string): Promise<LocalHive | null> {
      const fs = await import('fs/promises');
      const path = await import('path');
    
      try {
        const hivePath = path.join(projectPath, '.hive.json');
        const content = await fs.readFile(hivePath, 'utf-8');
        return JSON.parse(content);
      } catch {
        return null;
      }
    }

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/Kevthetech143/hivemind-mcp'

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