Skip to main content
Glama

search_objtypes

Search the objtypes.txt file for specific object or item definitions in OSRS. Use queries to locate game data, with pagination options for managing results.

Instructions

Search the objtypes.txt file for object/item definitions in the game.

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

  • index.ts:288-292 (registration)
    Registration of the "search_objtypes" tool in the ListToolsRequestSchema handler, including name, description, and shared FileSearchSchema.
    { name: "search_objtypes", description: "Search the objtypes.txt file for object/item definitions in the game.", inputSchema: convertZodToJsonSchema(FileSearchSchema), },
  • FileSearchSchema: Zod input schema used by search_objtypes for query, pagination 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") });
  • Handler logic in CallToolRequestSchema switch: matches search_objtypes case, derives 'objtypes.txt' filename from tool name, validates input, checks file existence, executes searchFile, and formats response.
    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);
  • searchFile helper: Performs case-insensitive search in the target file (objtypes.txt for this tool), supports pagination, formats results with ID-value extraction, returns structured results.
    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); }); }); }
  • fileExists helper: Checks if the data file (e.g., objtypes.txt) exists in the data directory.
    function fileExists(filename: string): boolean { const filePath = path.join(DATA_DIR, filename); return fs.existsSync(filePath); }

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