Skip to main content
Glama

search

Read-only

Find pre-indexed Dynamics 365 Finance & Operations objects by name or keyword; run single, batch, or extension-only queries to locate classes, tables, fields, and models.

Instructions

Search pre-indexed D365FO objects by name or keyword. Three modes in ONE tool: • single (default) → pass query; returns name, type, model. • batch → pass queries[] (max 10) to run searches in parallel (3× faster, with dedup + cross-reference). • extensions → set scope:"extensions" to restrict to custom/ISV models only (filters out Microsoft standard code). Model names in those results are SOURCE models — never use them as create/modify targets. Use get_object_info(objectType, name) when you already know the exact name and need full details.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "search"
  }
}

Input Schema

NameRequiredDescriptionDefault
typeNo[single] Filter by object type ("all" = no filter).all
limitNo[single|extensions] Maximum results to return
queryNo[single|extensions] Search query (class name, method name, table name, etc.). REQUIRED unless using batch `queries[]`.
scopeNo[single] Whole index, or only custom/ISV models. Ignored when `queries[]` is provided.all
prefixNo[extensions] Extension prefix filter (e.g., ISV_, Custom_).
queriesNo[batch] Array of search queries to execute in parallel (max 10). When provided, runs in batch mode and `scope`/`query` are ignored.
verboseNo[single] Include related-searches/patterns/tips sections.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.22.0
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "class",
      -  "table",
      -  "field",
      -  "method",
      -  "enum",
      -  "edt",
      -  "form",
      -  "query",
      -  "view",
      -  "report",
      -  "security-privilege",
      -  "security-duty",
      -  "security-role",
      -  "menu-item-display",
      -  "menu-item-action",
      -  "menu-item-output",
      -  "table-extension",
      -  "class-extension",
      -  "form-extension",
      -  "enum-extension",
      -  "edt-extension",
      -  "data-entity-extension",
      -  "all"
      -]New value: +[
      +  "class",
      +  "table",
      +  "field",
      +  "method",
      +  "enum",
      +  "edt",
      +  "form",
      +  "query",
      +  "view",
      +  "map",
      +  "report",
      +  "security-privilege",
      +  "security-duty",
      +  "security-role",
      +  "menu-item-display",
      +  "menu-item-action",
      +  "menu-item-output",
      +  "table-extension",
      +  "class-extension",
      +  "form-extension",
      +  "enum-extension",
      +  "edt-extension",
      +  "data-entity-extension",
      +  "all"
      +]
  2. Changed1 schema field changedv1.16.2
    • changedInput schema / properties / queries / items / properties / query / description
      Previous value: -"Search query (class name, method name, etc.)"New value: +"Search query."
  3. Changed10 schema fields changedv1.14.0
    • removedInput schema / properties / crossReference
      Removed value: -{
      -  "default": true,
      -  "description": "[batch] Append a cross-reference summary at the end listing symbols that appeared in multiple queries. Useful for identifying the most relevant / commonly matched objects across all searches.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / deduplicate
      Removed value: -{
      -  "default": true,
      -  "description": "[batch] When true, symbols appearing in multiple query results are collapsed. Later occurrences are replaced with a reference to the query where they first appeared.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / globalTypeFilter
      Removed value: -{
      -  "description": "[batch] Default type filter for queries without an explicit per-query type. E.g. [\"class\"] restricts all untyped queries to classes. Multiple values fan out each untyped query into one search per type. Values: same as the top-level `type`, except \"all\" (which means \"no filter\" — omit this instead).",
      -  "items": {
      -    "type": "string"
      -  },
      -  "maxItems": 5,
      -  "type": "array"
      -}
    • removedInput schema / properties / includeWorkspace
      Removed value: -{
      -  "default": false,
      -  "description": "[single] Whether to include workspace files in search results (workspace-aware search)",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / queries / items / properties / includeWorkspace
      Removed value: -{
      -  "default": false,
      -  "description": "Whether to include workspace files in results",
      -  "type": "boolean"
      -}
    • changedInput schema / properties / queries / items / properties / type / description
      Previous value: -"Filter by object type — same values as the top-level `type`. Omit to inherit globalTypeFilter or default to \"all\""New value: +"Filter by object type — same values as the top-level `type`."
    • removedInput schema / properties / queries / items / properties / workspacePath
      Removed value: -{
      -  "description": "Optional workspace path to search local files",
      -  "type": "string"
      -}
    • changedInput schema / properties / scope / description
      Previous value: -"[single] Search the whole index (\"all\", default) or only custom/ISV models (\"extensions\"). Ignored when `queries[]` is provided."New value: +"[single] Whole index, or only custom/ISV models. Ignored when `queries[]` is provided."
    • changedInput schema / properties / verbose / description
      Previous value: -"[single] Include related-searches/patterns/tips sections (off by default to keep responses compact)."New value: +"[single] Include related-searches/patterns/tips sections."
    • removedInput schema / properties / workspacePath
      Removed value: -{
      -  "description": "[single] Optional workspace path to search local project files in addition to external metadata",
      -  "type": "string"
      -}
  4. Changed4 schema fields changedv1.9.0
    • changedInput schema / properties / globalTypeFilter / description
      Previous value: -"[batch] Default type filter for queries without an explicit per-query type. E.g. [\"class\"] restricts all untyped queries to classes. Multiple values fan out each untyped query into one search per type."New value: +"[batch] Default type filter for queries without an explicit per-query type. E.g. [\"class\"] restricts all untyped queries to classes. Multiple values fan out each untyped query into one search per type. Values: same as the top-level `type`, except \"all\" (which means \"no filter\" — omit this instead)."
    • removedInput schema / properties / globalTypeFilter / items / enum
      Removed value: -[
      -  "class",
      -  "table",
      -  "form",
      -  "field",
      -  "method",
      -  "enum",
      -  "edt",
      -  "query",
      -  "view",
      -  "report",
      -  "security-privilege",
      -  "security-duty",
      -  "security-role",
      -  "menu-item-display",
      -  "menu-item-action",
      -  "menu-item-output",
      -  "table-extension",
      -  "class-extension",
      -  "form-extension",
      -  "enum-extension",
      -  "edt-extension",
      -  "data-entity-extension"
      -]
    • changedInput schema / properties / queries / items / properties / type / description
      Previous value: -"Filter by object type. Omit to inherit globalTypeFilter or default to \"all\""New value: +"Filter by object type — same values as the top-level `type`. Omit to inherit globalTypeFilter or default to \"all\""
    • removedInput schema / properties / queries / items / properties / type / enum
      Removed value: -[
      -  "class",
      -  "table",
      -  "field",
      -  "method",
      -  "enum",
      -  "edt",
      -  "form",
      -  "query",
      -  "view",
      -  "report",
      -  "security-privilege",
      -  "security-duty",
      -  "security-role",
      -  "menu-item-display",
      -  "menu-item-action",
      -  "menu-item-output",
      -  "table-extension",
      -  "class-extension",
      -  "form-extension",
      -  "enum-extension",
      -  "edt-extension",
      -  "data-entity-extension",
      -  "all"
      -]
  5. First observedv1.8.0

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: batch mode does dedup and cross-reference, extensions scope filters out Microsoft standard code, and model names in extension results are SOURCE models that must never be used as create/modify targets. However, it does not describe result ordering, truncation, or what happens on an empty/no-match search, leaving those behavioral edges unstated.

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

Conciseness4/5

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

The description is front-loaded with the core statement and then a tight three-bullet breakdown of modes, with every bullet carrying distinct actionable content. It is dense and slightly long, but no sentence is filler; the only cost is that the mode tags repeated in the schema also appear here.

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

Completeness4/5

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

With no output schema, the description must cover return values, and it does so for single mode (name, type, model) but only loosely for batch (dedup + cross-reference) and not at all for verbose sections. For a 7-parameter search tool with enum-constrained types and a hard maxItems of 10, this is close to complete but leaves the batch/verbose return shapes underspecified.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the mode-gating interactions in prose: `query` is required unless `queries[]` is supplied, and `scope` is ignored when `queries[]` is provided. That said, individual parameter meanings (e.g., `prefix` matching semantics, `verbose` section contents) largely restate the schema rather than extend it.

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?

States a specific verb and resource ("Search pre-indexed D365FO objects by name or keyword") and then enumerates the three modes it covers, so an agent immediately knows the scope. It also explicitly distinguishes itself from get_object_info, removing ambiguity with the closest sibling.

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?

Gives explicit mode selection rules: default single mode with `query`, batch with `queries[]` (max 10, 3x faster), and extensions via `scope:"extensions"`. It also names the alternative tool and the exact condition that selects it ("when you already know the exact name and need full details"), which is textbook routing guidance.

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