Skip to main content
Glama

search_tabletypes

Find interface tab definitions in the tabletypes.txt file by searching with a query. Supports pagination to manage results efficiently. Use this tool to locate specific game data entries.

Instructions

Search the tabletypes.txt file for interface tab definitions.

Input Schema

NameRequiredDescriptionDefault
pageNoPage number for pagination
pageSizeNoNumber of results per page
queryYesThe term to search for in the file

Input Schema (JSON Schema)

{ "additionalProperties": false, "properties": { "page": { "default": 1, "description": "Page number for pagination", "minimum": 1, "type": "integer" }, "pageSize": { "default": 10, "description": "Number of results per page", "maximum": 100, "minimum": 1, "type": "integer" }, "query": { "description": "The term to search for in the file", "type": "string" } }, "required": [ "query" ], "type": "object" }

Implementation Reference

  • Shared handler logic for search_tabletypes and other search_* tools. Parses arguments, determines filename 'tabletypes.txt', checks existence, and calls searchFile helper.
    case "search_varptypes": case "search_varbittypes": case "search_iftypes": case "search_invtypes": case "search_loctypes": case "search_npctypes": case "search_objtypes": case "search_rowtypes": case "search_seqtypes": case "search_soundtypes": case "search_spottypes": case "search_spritetypes": case "search_tabletypes": const { query, page: filePage = 1, pageSize: filePageSize = 10 } = FileSearchSchema.parse(args); const filename = `${name.replace('search_', '')}.txt`; const filePath = path.join(DATA_DIR, filename); if (!fileExists(filename)) { return responseToString({ error: `${filename} not found in data directory` }); } const fileResults = await searchFile(filePath, query, filePage, filePageSize); return responseToString(fileResults);
  • Input schema (FileSearchSchema) used by search_tabletypes for validating query, page, and pageSize parameters.
    const FileSearchSchema = z.object({ query: z.string().describe("The term to search for in the file"), page: z.number().int().min(1).optional().default(1).describe("Page number for pagination"), pageSize: z.number().int().min(1).max(100).optional().default(10).describe("Number of results per page") });
  • index.ts:318-322 (registration)
    Tool registration in listTools handler, specifying name, description, and input schema.
    { name: "search_tabletypes", description: "Search the tabletypes.txt file for interface tab definitions.", inputSchema: convertZodToJsonSchema(FileSearchSchema), },
  • Core searchFile helper function that performs case-insensitive search in the specified file, supports pagination, and formats results as key-value pairs.
    async function searchFile(filePath: string, searchTerm: string, page: number = 1, pageSize: number = 10): Promise<any> { //replace spaces with underscores searchTerm = searchTerm.replace(" ", "_"); return new Promise((resolve, reject) => { if (!fs.existsSync(filePath)) { reject(new Error(`File not found: ${filePath}`)); return; } const results: {line: string, lineNumber: number}[] = []; const fileStream = fs.createReadStream(filePath); const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); let lineNumber = 0; rl.on('line', (line) => { lineNumber++; if (line.toLowerCase().includes(searchTerm.toLowerCase())) { results.push({ line, lineNumber }); } }); rl.on('close', () => { const totalResults = results.length; const totalPages = Math.ceil(totalResults / pageSize); const startIndex = (page - 1) * pageSize; const endIndex = startIndex + pageSize; const paginatedResults = results.slice(startIndex, endIndex); // Process the results to extract key-value pairs if possible const formattedResults = paginatedResults.map(result => { // Try to format as key-value pair (common for ID data files) const parts = result.line.split(/\s+/); if (parts.length >= 2) { const id = parts[0]; const value = parts.slice(1).join(' '); return { ...result, id, value, formatted: `${id}\t${value}` }; } return result; }); resolve({ results: formattedResults, pagination: { page, pageSize, totalResults, totalPages, hasNextPage: page < totalPages, hasPreviousPage: page > 1 } }); }); rl.on('error', (err) => { reject(err); }); }); }

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/JayArrowz/mcp-osrs'

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