Skip to main content
Glama

search_index

Search course threads with full-text ranking and filters, supporting phrases, boolean, prefix, and column-specific queries. Auto-syncs the index, so results stay current.

Instructions

DEFAULT thread search/browse tool. Searches the local BM25-ranked index over all threads in a course. Returns ranked results with full content for top hits. Auto-syncs when the index is missing or stale (>30 min) — you do NOT need to call sync_index first in normal use. Supports phrases, prefix, boolean, and column-specific queries. If a refresh fails but a prior index exists, falls back to the stale data — check the returned last_synced timestamp before treating results as fresh. First call on a large unsynced course may take several seconds while the initial sync runs. Use this for any thread lookup, search, or filtered browse before falling back to list_threads/search_threads.

Args: course_id: The course ID (use list_courses to find it). query: Search query. Supports phrases ("peer review"), prefix (assign*), boolean (AND/OR/NOT), and column-specific (title:exam, staff_replies:deadline). Implicit AND between terms. limit: Max results (default 20). category: Filter by category name (e.g. "Assignments"). type: Filter by thread type — "question", "post", or "announcement". has_staff_reply: If true, only threads with staff/admin replies. is_answered: If true, only answered threads.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
typeNo
limitNo
queryYes
categoryNo
course_idYes
is_answeredNo
has_staff_replyNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses auto-sync behavior (>30 min stale triggers refresh), fallback to stale data on refresh failure, the need to check last_synced timestamp, and that the first call on a large unsynced course may take several seconds. These are meaningful behavioral traits not visible from the schema or sibling list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place: purpose, sync behavior, query syntax, fallback semantics, latency warning, and usage precedence. It front-loads the core function and then moves from high-level behavior to parameter details. The Args block is clean and consistent with schema names, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the complexity (7 parameters, output schema, sibling tools, no annotations), the description covers all essential context: what it does, how to use it, when to prefer it, sync/latency caveats, and the meaning of every parameter. The output schema exists so return-value details are not required, and the description still mentions 'returns ranked results with full content for top hits' for orientation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully document parameters. It does: course_id is 'the course ID (use list_courses to find it)', query gets detailed syntax (phrases, prefix, boolean, column-specific), and each filter (limit, category, type, has_staff_reply, is_answered) receives a clear meaning. This adds substantial semantic value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'DEFAULT thread search/browse tool' and clearly states it 'Searches the local BM25-ranked index over all threads in a course.' It explicitly distinguishes itself from siblings by directing use 'before falling back to list_threads/search_threads.' The verb 'searches' plus the resource (threads) and index mechanism make the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'Use this for any thread lookup, search, or filtered browse before falling back to list_threads/search_threads.' It also explains when no prior sync is needed ('you do NOT need to call sync_index first in normal use') and how to interpret stale fallback results via the last_synced timestamp. This goes beyond vague context into actionable selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other 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/januarharianto/ed-mcp'

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