Skip to main content
Glama

Metadata

metadata
Read-only

Fastio workspace metadata (read): the field VOCABULARY (fields-list), lexical value search (search), metadata+content matching (compound-search), extraction eligibility (eligible), merge proposals (fields-merge-candidates), saved filters (filters-list, filter-details, filter-nodes). Templates and saved views were removed; extraction is on storage_manage. Writes are on metadata_manage. action='describe' gives the full reference.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNosearch keyword(s). 1-1024 chars. Multi-token = ALL tokens (AND); case-insensitive; substring for <=64 chars, else whole-word.
limitNosearch: page size (1-100, default 100).
actionYesOperation. Use 'describe' for full action reference.
cursorNoeligible/fields-list: opaque cursor from the prior page's response, echoed back verbatim. Omit for the first page.
offsetNosearch: results to skip (offset+limit <= 10000). fields-merge-candidates: the prior next_offset.
sort_dirNofilter-nodes: sort direction. Default desc for updated, asc otherwise.
filter_idNoSaved filter ID (from filters-list).
page_sizeNoeligible/fields-list: cursor page size (1-250, default 100). Server caps at 250.
sort_fieldNofilter-nodes: order by a file column. Not with sort_metadata_field.
template_idNoRETIRED (metadata templates were removed): supplying it fails the request on every action. Narrow by field name (fields-list).
workspace_idNoWorkspace opaque ID (19-digit numeric ID or custom name). Required for every action.
content_queryNocompound-search: free-text query run against INDEXED FILE CONTENT (1-1024 chars). AND-ed with metadata_filters — a file matches only if it satisfies BOTH. A file with no indexed content can never match, however well its metadata fits.
display_limitNosearch: how many items to return post-fetch. Default 10, max 100 (page past 100 with offset).
describe_actionNoWith action='describe': return one action's params and notes instead of the action index.
metadata_filtersNocompound-search: JSON predicate array `[{"field","operator","value"}]` (sent to the platform as `filters`). Required for compound-search.
sort_metadata_fieldNofilter-nodes: order by this metadata field's value. Not with sort_field.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "describe",
      -  "eligible",
      -  "fields-list",
      -  "search",
      -  "compound-search"
      -]New value: +[
      +  "describe",
      +  "eligible",
      +  "fields-list",
      +  "search",
      +  "compound-search",
      +  "fields-merge-candidates",
      +  "filters-list",
      +  "filter-details",
      +  "filter-nodes"
      +]
    • addedInput schema / properties / filter_id
      Added value: +{
      +  "description": "Saved filter ID (from filters-list).",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / properties / offset / description
      Previous value: -"search: results to skip (default 0). offset+limit must stay <= 10000."New value: +"search: results to skip (offset+limit <= 10000). fields-merge-candidates: the prior next_offset."
    • addedInput schema / properties / sort_dir
      Added value: +{
      +  "description": "filter-nodes: sort direction. Default desc for updated, asc otherwise.",
      +  "enum": [
      +    "asc",
      +    "desc"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / sort_field
      Added value: +{
      +  "description": "filter-nodes: order by a file column. Not with sort_metadata_field.",
      +  "enum": [
      +    "name",
      +    "size",
      +    "updated"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / sort_metadata_field
      Added value: +{
      +  "description": "filter-nodes: order by this metadata field's value. Not with sort_field.",
      +  "minLength": 1,
      +  "type": "string"
      +}
  2. Changed9 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "describe",
      -  "eligible",
      -  "fields-list",
      -  "search",
      -  "compound-search",
      -  "fields-merge"
      -]New value: +[
      +  "describe",
      +  "eligible",
      +  "fields-list",
      +  "search",
      +  "compound-search"
      +]
    • removedInput schema / properties / confirm
      Removed value: -{
      -  "description": "fields-merge: must be 'true' to proceed. The merge is IRREVERSIBLE and workspace-wide; the gate exists because the platform's guards check DATA safety, not whether the two fields mean the same thing.",
      -  "enum": [
      -    "true",
      -    "false"
      -  ],
      -  "type": "string"
      -}
    • changedInput schema / properties / content_query / description
      Previous value: -"compound-search: free-text query run against INDEXED FILE CONTENT (1-1024 chars). Required for compound-search and AND-ed with metadata_filters — a file matches only if it satisfies BOTH. A file with no indexed content can never match, however well its metadata fits."New value: +"compound-search: free-text query run against INDEXED FILE CONTENT (1-1024 chars). AND-ed with metadata_filters — a file matches only if it satisfies BOTH. A file with no indexed content can never match, however well its metadata fits."
    • changedInput schema / properties / cursor / description
      Previous value: -"eligible/fields-list: opaque pagination cursor from a prior page's response — echo it back verbatim rather than constructing one. Omit for the first page."New value: +"eligible/fields-list: opaque cursor from the prior page's response, echoed back verbatim. Omit for the first page."
    • changedInput schema / properties / describe_action / description
      Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'fields-list'). Omit to get the compact action index."New value: +"With action='describe': return one action's params and notes instead of the action index."
    • changedInput schema / properties / display_limit / description
      Previous value: -"search: how many items to return post-fetch. Default 10, max 100 (the backend fetches at most 100 per page — a higher value has no effect; use offset to page past 100)."New value: +"search: how many items to return post-fetch. Default 10, max 100 (page past 100 with offset)."
    • removedInput schema / properties / source_field
      Removed value: -{
      -  "description": "fields-merge: the field NAME that is FOLDED AWAY and stops existing. Names, not ids.",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / target_field
      Removed value: -{
      -  "description": "fields-merge: the field NAME that SURVIVES and absorbs the source's values.",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • changedInput schema / properties / template_id / description
      Previous value: -"RETIRED — metadata templates were removed, so there is no template to scope to. This tool REFUSES it on EVERY action: supplying it FAILS the request rather than narrowing it (the platform hard-refuses it too, and OPTIONS deliberately does not advertise it). Narrow by FIELD NAME instead — list valid names with `metadata action=fields-list`."New value: +"RETIRED (metadata templates were removed): supplying it fails the request on every action. Narrow by field name (fields-list)."
  3. Changed25 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "describe",
      -  "template-create",
      -  "template-list",
      -  "template-details",
      -  "template-update",
      -  "template-clone",
      -  "template-delete",
      -  "template-assign",
      -  "template-unassign",
      -  "template-resolve",
      -  "template-assignments",
      -  "preview-match",
      -  "suggest-fields",
      -  "eligible",
      -  "nodes-add",
      -  "nodes-remove",
      -  "nodes-list",
      -  "auto-match",
      -  "extract-all",
      -  "view-get",
      -  "view-save",
      -  "view-delete",
      -  "views-list",
      -  "view-export",
      -  "search"
      -]New value: +[
      +  "describe",
      +  "eligible",
      +  "fields-list",
      +  "search",
      +  "compound-search",
      +  "fields-merge"
      +]
    • removedInput schema / properties / batch_size
      Removed value: -{
      -  "description": "auto-match: optional batch-size override (clamped server-side). Omit for default.",
      -  "maximum": 9007199254740991,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / category
      Removed value: -{
      -  "description": "Metadata template category (accepted but ignored server-side — no effect).",
      -  "enum": [
      -    "legal",
      -    "financial",
      -    "business",
      -    "medical",
      -    "technical",
      -    "engineering",
      -    "insurance",
      -    "educational",
      -    "multimedia",
      -    "hr"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / config
      Removed value: -{
      -  "description": "view-save config JSON: `{version:1, columns:[{field,visible?,width?}], sort:{field,dir}, filters:[{field,operator,value_type,value}]}`. Max 5 filters AND-chained; operator in `= != < <= > >=`; value_type in `string|int|float|bool`.",
      -  "type": "string"
      -}
    • addedInput schema / properties / confirm
      Added value: +{
      +  "description": "fields-merge: must be 'true' to proceed. The merge is IRREVERSIBLE and workspace-wide; the gate exists because the platform's guards check DATA safety, not whether the two fields mean the same thing.",
      +  "enum": [
      +    "true",
      +    "false"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / content_query
      Added value: +{
      +  "description": "compound-search: free-text query run against INDEXED FILE CONTENT (1-1024 chars). Required for compound-search and AND-ed with metadata_filters — a file matches only if it satisfies BOTH. A file with no indexed content can never match, however well its metadata fits.",
      +  "maxLength": 1024,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / properties / cursor / description
      Previous value: -"eligible/nodes-list: opaque pagination cursor from a prior page's response. Omit for the first page."New value: +"eligible/fields-list: opaque pagination cursor from a prior page's response — echo it back verbatim rather than constructing one. Omit for the first page."
    • changedInput schema / properties / describe_action / description
      Previous value: -"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'template-list'). Omit to get the compact action index."New value: +"When action='describe', narrow the output to ONE action's full params/notes (e.g. 'fields-list'). Omit to get the compact action index."
    • removedInput schema / properties / description
      Removed value: -{
      -  "description": "Template description. ≤255 chars, empty allowed (template-create/-update/-clone). preview-match: required, 1-2000. suggest-fields: optional, ≤2000.",
      -  "maxLength": 2000,
      -  "type": "string"
      -}
    • removedInput schema / properties / extract_fields
      Removed value: -{
      -  "description": "extract-all: JSON array of field names to restrict the batch job to (e.g. `[\"vendor\",\"amount\"]`); omit for all fields.",
      -  "type": "string"
      -}
    • removedInput schema / properties / fields
      Removed value: -{
      -  "description": "JSON array of field defs (template-create/-update/-clone). At least one field must have autoextract:true (default) or API returns 1605. Each: {name, description, type (string|int|float|bool|json|url|datetime), min?, max?, default?, fixed_list?, can_be_null?, autoextract?}.",
      -  "type": "string"
      -}
    • removedInput schema / properties / filters
      Removed value: -{
      -  "description": "template-list filter (default 'all'): all|enabled|disabled|custom|system. (Replaces the old workspace `template_filter` param.)",
      -  "enum": [
      -    "all",
      -    "enabled",
      -    "disabled",
      -    "custom",
      -    "system"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / force
      Removed value: -{
      -  "description": "extract-all: when 'true', re-extract every mapped node even if it already has KV data (re-extract flow). Default 'false' skips nodes with values present.",
      -  "enum": [
      -    "true",
      -    "false"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / metadata_filters
      Added value: +{
      +  "description": "compound-search: JSON predicate array `[{\"field\",\"operator\",\"value\"}]` (sent to the platform as `filters`). Required for compound-search. ",
      +  "type": "string"
      +}
    • removedInput schema / properties / name
      Removed value: -{
      -  "description": "Template name (1-255 chars: template-create/-update/-clone and preview-match), OR an optional saved-view label on view-save (≤30 chars; omit to keep the existing label).",
      -  "maxLength": 255,
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / node_id
      Removed value: -{
      -  "description": "Storage tree node opaque ID (used by template-resolve, and template-assign to scope an assignment).",
      -  "type": "string"
      -}
    • removedInput schema / properties / node_ids
      Removed value: -{
      -  "description": "JSON array of node IDs. suggest-fields: 1-25 file nodes. nodes-add/-remove: nodes to map/unmap (files+notes; folders/links rejected) — deduped first-seen, max 50 unique per call (the server hard-rejects >50 per request; the per-template TOTAL node cap is separate and enforced server-side).",
      -  "type": "string"
      -}
    • changedInput schema / properties / page_size / description
      Previous value: -"eligible/nodes-list: cursor page size (1-250, default 100). Server caps at 250."New value: +"eligible/fields-list: cursor page size (1-250, default 100). Server caps at 250."
    • removedInput schema / properties / parent_node_id
      Removed value: -{
      -  "description": "view-export destination folder opaque ID (must be a folder, not trashed). Omit for workspace root.",
      -  "maxLength": 64,
      -  "type": "string"
      -}
    • removedInput schema / properties / sort_dir
      Removed value: -{
      -  "description": "nodes-list: asc|desc (only with sort_field).",
      -  "enum": [
      -    "asc",
      -    "desc"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / sort_field
      Removed value: -{
      -  "description": "nodes-list: optional template field name to sort by.",
      -  "type": "string"
      -}
    • addedInput schema / properties / source_field
      Added value: +{
      +  "description": "fields-merge: the field NAME that is FOLDED AWAY and stops existing. Names, not ids.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / target_field
      Added value: +{
      +  "description": "fields-merge: the field NAME that SURVIVES and absorbs the source's values.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / properties / template_id / description
      Previous value: -"Metadata template ID (e.g. mt_abc123). For search, restricts to nodes with values from this template (custom fields excluded)."New value: +"RETIRED — metadata templates were removed, so there is no template to scope to. This tool REFUSES it on EVERY action: supplying it FAILS the request rather than narrowing it (the platform hard-refuses it too, and OPTIONS deliberately does not advertise it). Narrow by FIELD NAME instead — list valid names with `metadata action=fields-list`."
    • removedInput schema / properties / user_context
      Removed value: -{
      -  "description": "suggest-fields: short view/template hint (1-64 chars, letters/numbers/spaces). Example: \"photo collection\".",
      -  "maxLength": 64,
      -  "minLength": 1,
      -  "type": "string"
      -}
  4. Changed1 schema field changed
    • changedInput schema / properties / description / description
      Previous value: -"Template description. ≤1000 chars, empty allowed (template-create/-update/-clone). preview-match: required, 1-2000. suggest-fields: optional, ≤2000."New value: +"Template description. ≤255 chars, empty allowed (template-create/-update/-clone). preview-match: required, 1-2000. suggest-fields: optional, ≤2000."
  5. Changed5 schema fields changed
    • changedInput schema / properties / config / description
      Previous value: -"view-save config JSON: `{version:1, columns:[{field,visible?,width?}], sort:{field,dir}, filters:[{field,operator,value_type,value}]}`. Max 5 filters…"New value: +"view-save config JSON: `{version:1, columns:[{field,visible?,width?}], sort:{field,dir}, filters:[{field,operator,value_type,value}]}`. Max 5 filters AND-chained; operator in `= != < <= > >=`; value_type in `string|int|float|bool`."
    • changedInput schema / properties / display_limit / description
      Previous value: -"search: how many items to return post-fetch. Default 10, max 100 (the backend fetches at most 100 per page — a higher value has no effect; use offset to page…"New value: +"search: how many items to return post-fetch. Default 10, max 100 (the backend fetches at most 100 per page — a higher value has no effect; use offset to page past 100)."
    • changedInput schema / properties / fields / description
      Previous value: -"JSON array of field defs (template-create/-update/-clone). At least one field must have autoextract:true (default) or API returns 1605. Each: {name,…"New value: +"JSON array of field defs (template-create/-update/-clone). At least one field must have autoextract:true (default) or API returns 1605. Each: {name, description, type (string|int|float|bool|json|url|datetime), min?, max?, default?, fixed_list?, can_be_null?, autoextract?}."
    • changedInput schema / properties / name / description
      Previous value: -"Template name (1-255 chars: template-create/-update/-clone and preview-match), OR an optional saved-view label on view-save (≤30 chars; omit to keep the…"New value: +"Template name (1-255 chars: template-create/-update/-clone and preview-match), OR an optional saved-view label on view-save (≤30 chars; omit to keep the existing label)."
    • changedInput schema / properties / node_ids / description
      Previous value: -"JSON array of node IDs. suggest-fields: 1-25 file nodes. nodes-add/-remove: nodes to map/unmap (files+notes; folders/links rejected) — deduped first-seen, max…"New value: +"JSON array of node IDs. suggest-fields: 1-25 file nodes. nodes-add/-remove: nodes to map/unmap (files+notes; folders/links rejected) — deduped first-seen, max 50 unique per call (the server hard-rejects >50 per request; the per-template TOTAL node cap is separate and enforced server-side)."
  6. Changed1 schema field changed
    • changedInput schema / properties / name / description
      Previous value: -"Template name. 1-255 chars (template-create/-update/-clone and preview-match)."New value: +"Template name (1-255 chars: template-create/-update/-clone and preview-match), OR an optional saved-view label on view-save (≤30 chars; omit to keep the…"
  7. Added

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful non-obvious context: retired features, that template_id now fails on every action, and that a describe action exists to fetch the full reference. It does not discuss rate limits or response shape beyond pointing at describe.

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?

Front-loaded with the tool scope and the read/write split, with the long action parenthetical placed mid-sentence. The sentence listing eight actions is dense but every clause maps to a real enum value, so little is wasted.

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?

For a 16-parameter, 9-action router with no output schema, the description is compact yet covers scope, sibling boundaries, deprecations, and a pointer to action='describe' for the full reference. That pointer compensates for the lack of per-action detail in the description itself.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 16 parameters is already documented in structured form, including the cursor, offset, and required-for-compound-search details. The description adds only the action glosses (fields-list, search, compound-search, etc.), which is the expected baseline when the schema does the heavy lifting.

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 ('Fastio workspace metadata (read)') and enumerates the nine operations it exposes, so an agent knows exactly what capability set this covers. It also explicitly separates itself from metadata_manage (writes) and storage_manage (extraction), making sibling disambiguation immediate.

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?

Names the alternatives by tool ('Writes are on metadata_manage', 'extraction is on storage_manage') and flags the removed capabilities (templates, saved views). It also gives the escape hatch for deeper detail via action='describe', which is an explicit when-to-use instruction.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources