Skip to main content
Glama

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}`; }

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