Skip to main content
Glama

search

Read-only

Find Dynamics 365 Finance and Operations objects by name or keyword across pre-indexed code. Use single, batch, or extension-scoped queries to locate metadata.

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.

Input Schema

TableJSON 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.16.2
    • changedInput schema / properties / queries / items / properties / query / description
      Previous value: -"Search query (class name, method name, etc.)"New value: +"Search query."
  2. 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"
      -}
  3. 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"
      -]
  4. First observedv1.8.0

TDQS

A4.9/5.0
Behavior5/5

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

Beyond readOnlyHint, the description explains batch parallelization/dedup/cross-reference behavior and warns that extension results report SOURCE models that must never be used as create/modify targets. It also documents ignored parameters in batch mode. This is meaningful behavioral disclosure beyond the annotations.

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 compact, scannable, and front-loads the core statement followed by three mode bullets and one routing sentence. Every sentence adds decision-relevant information; no filler or repetition.

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?

For a read-only search tool with no output schema, it covers return content (name, type, model), mode-specific parameter behavior, the extension-model warning, and the relevant sibling. Nothing essential for selecting or invoking the tool is missing.

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 coverage is 100%, so the baseline is 3. The description adds mode-level semantics that connect parameters (query vs queries[], scope ignored in batch, extensions + prefix), plus the source-model caveat, which goes beyond the schema descriptions and helps agents construct valid calls.

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 a specific verb and resource—'Search pre-indexed D365FO objects by name or keyword'—and goes on to name the sibling alternative get_object_info when exact names are known. This makes the tool's job unambiguous and distinguishes it from nearby lookup tools.

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?

It explicitly defines three modes and when each applies (single, batch, extensions), states the max batch size, and closes with a concrete routing rule: use get_object_info when exact name and full details are needed. This is actionable selection guidance rather than implicit context.

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