Skip to main content
Glama
gleanwork

Glean MCP Server

by gleanwork

company_search

Search for company-specific documents and data across multiple sources like Drive, Confluence, and Jira using a structured query.

Instructions

Find relevant company documents and data

    Example request:

    {
        "query": "What are the company holidays this year?",
        "datasources": ["drive", "confluence"]
    }
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
datasourcesNoOptional list of data sources to search in. Examples: "github", "gdrive", "confluence", "jira".
queryYesThe search query. This is what you want to search for.

Implementation Reference

  • Core handler function that executes the company_search tool logic: maps params, validates, gets Glean client, and queries search.
    export async function search(params: ToolSearchRequest) {
      const mappedParams = convertToAPISearchRequest(params);
      const parsedParams = SearchRequestSchema.parse(mappedParams) as SearchRequest;
      const client = await getClient();
    
      return await client.search.query(parsedParams);
    }
  • Zod input schema defining parameters for the company_search tool: required query and optional datasources array.
    export const ToolSearchSchema = z.object({
      query: z
        .string()
        .describe('The search query. This is what you want to search for.'),
    
      datasources: z
        .array(z.string())
        .describe(
          'Optional list of data sources to search in. Examples: "github", "gdrive", "confluence", "jira".',
        )
        .optional(),
    });
  • Tool registration in listToolsHandler: defines name 'company_search', description, and references input schema.
    {
      name: TOOL_NAMES.companySearch,
      description: `Find relevant company documents and data
    
      Example request:
    
      {
          "query": "What are the company holidays this year?",
          "datasources": ["drive", "confluence"]
      }
      `,
      inputSchema: z.toJSONSchema(search.ToolSearchSchema),
    },
  • MCP callTool handler case for company_search: parses arguments, invokes search implementation, formats, and returns response.
    case TOOL_NAMES.companySearch: {
      const args = search.ToolSearchSchema.parse(request.params.arguments);
      const result = await search.search(args);
      const formattedResults = search.formatResponse(result);
    
      return {
        content: [{ type: 'text', text: formattedResults }],
        isError: false,
      };
    }
  • Helper to format Glean search results into human-readable text blocks with titles, snippets, sources, and URLs.
    export function formatResponse(searchResults: any): string {
      if (
        !searchResults ||
        !searchResults.results ||
        !Array.isArray(searchResults.results)
      ) {
        return 'No results found.';
      }
    
      const formattedResults = searchResults.results
        .map((result: any, index: number) => {
          const title = result.title || 'No title';
          const url = result.url || '';
          const document = result.document || {};
    
          let snippetText = '';
          if (result.snippets && Array.isArray(result.snippets)) {
            const sortedSnippets = [...result.snippets].sort((a, b) => {
              const orderA = a.snippetTextOrdering || 0;
              const orderB = b.snippetTextOrdering || 0;
              return orderA - orderB;
            });
    
            snippetText = sortedSnippets
              .map((snippet) => snippet.text || '')
              .filter(Boolean)
              .join('\n');
          }
    
          if (!snippetText) {
            snippetText = 'No description available';
          }
    
          return `[${index + 1}] ${title}\n${snippetText}\nSource: ${
            document.datasource || 'Unknown source'
          }\nURL: ${url}`;
        })
        .join('\n\n');
    
      const totalResults =
        searchResults.totalResults || searchResults.results.length;
      const query = searchResults.metadata.searchedQuery || 'your query';
    
      return `Search results for "${query}" (${totalResults} results):\n\n${formattedResults}`;
    }
Install Server

Other Tools

Related Tools

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/gleanwork/mcp-server'

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