Skip to main content
Glama
BilalAtique

expensify-mcp

by BilalAtique

Server Quality Checklist

58%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v0.1.0

  • Disambiguation5/5

    Every tool targets a distinct resource or action (e.g., policies, expenses, reports, employees, rules, exports). Even related tools like create/update expense rules are clearly separated, and operations like exporting vs downloading have different names and purposes.

    Naming Consistency5/5

    All tool names follow the exact pattern 'expensify_verb_noun' (e.g., list_policies, get_policy, create_policy, export_reports). The convention is uniform with no mixing of camelCase or other styles.

    Tool Count5/5

    17 tools cover the major workflows in expense management: policy lifecycle, expense/report creation, rule management, employee administration, and data export. The count feels comprehensive without being bloated.

    Completeness4/5

    Core CRUD operations are present for policies, expenses, reports, employees, categories, tags, and rules. The only notable gaps are lacking a policy delete tool and a direct list-reports endpoint (the export tool substitutes). Given API constraints, this is reasonable.

  • Average 4.2/5 across 17 of 17 tools scored. Lowest: 3.2/5.

    See the Tool Scores section below for per-tool breakdowns.

    • No community issues in the last 6 months
    • 5 commits in the last 12 weeks
    • No stable releases found
    • No critical vulnerability alerts
    • No high-severity vulnerability alerts
    • No code scanning findings
    • CI is passing
  • Add a LICENSE file by following GitHub's guide. Once GitHub recognizes the license, the system will automatically detect it within a few hours.

    If the license does not appear after some time, you can manually trigger a new scan using the MCP server admin interface.

    MCP servers without a LICENSE cannot be installed.

  • This repository includes a README.md file.

  • No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.

    Tip: use the "Try in Browser" feature on the server page to seed initial usage.

  • Add a glama.json file to provide metadata about your server.

  • If you are the author, simply .

    If the server belongs to an organization, first add glama.json to the root of your repository:

    {
      "$schema": "https://glama.ai/mcp/schemas/server.json",
      "maintainers": [
        "your-github-username"
      ]
    }

    Then . Browse examples.

  • Add related servers to improve discoverability.

How to sync the server with GitHub?

Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.

To manually sync the server, click the "Sync Server" button in the MCP server admin interface.

How is the quality score calculated?

The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).

Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.

Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).

Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.

Tool Scores

  • Behavior3/5

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

    Annotations already indicate write and destructive behavior. The description adds the important note that dry-run is enabled, so it previews only, which clarifies current behavior. However, it does not disclose other behavioral traits like error handling or necessary permissions.

    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 extremely concise with two sentences. The first sentence states the purpose, and the second sentence provides critical usage context (write and dry-run). No unnecessary words.

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

    Completeness2/5

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

    Given 3 required parameters including a nested object and no output schema, the description is incomplete. It lacks information about what the dry-run preview returns, prerequisites (e.g., valid policy and employee), and any side effects beyond the dry-run note.

    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 coverage is 67%, leaving the 'actions' object partially described. The description adds meaning by referencing 'tag or billable status,' which maps to two subproperties. However, it does not enrich the understanding of policyID or employeeEmail beyond the schema descriptions.

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

    Purpose4/5

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

    The description clearly states the action (create), the resource (expense rule), and its purpose (apply tag or billable status for an employee on a policy). It distinguishes from other create tools like creating expenses or reports, but does not explicitly differentiate from the sibling tool expensify_update_expense_rule.

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

    Usage Guidelines2/5

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

    The description provides no guidance on when to use this tool versus alternatives. It mentions 'Dry-run is currently ON' but does not explain under what circumstances to use this tool or when to use the update sibling instead.

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

  • Behavior4/5

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

    Beyond annotations, the description discloses that the report is created in an unsubmitted state, that the API cannot submit/approve, and that a dry-run is currently preventing actual writes. These add significant behavioral context.

    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 three sentences with clear structure, but includes a line break that could be smoothed. It is efficient and contains no extraneous information.

    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 tool with nested objects and no output schema, the description covers key aspects: return value, state, and temporary dry-run. It is sufficient for an agent to understand the tool's effect, though error handling is not covered.

    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 coverage is 100% with descriptions for all parameters. The description adds value by clarifying amount units (cents) and date format, but this is partially redundant with schema pattern and type constraints.

    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 clearly states the tool creates an expense report on a policy, optionally attaching expenses, and returns the reportID. This distinguishes it from sibling tools like expensify_create_expenses.

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

    Usage Guidelines3/5

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

    The description gives context about the unsubmitted state and dry-run, but does not explicitly instruct when to use this tool versus alternatives like expensify_create_expenses. Usage guidance is implied but not explicit.

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

  • Behavior4/5

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

    Annotations declare readOnlyHint=true, which aligns with 'export' meaning read-only. The description adds the behavioral trait of returning a filename to download, which goes beyond annotations. No contradictions.

    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?

    Two sentences with no fluff; front-loaded with key purpose and workflow hint. Every sentence adds value.

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

    Completeness3/5

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

    Despite no output schema, the description outlines the workflow. However, it misses details about optional parameters, error handling, or filename format, leaving completeness gaps for a tool with 6 parameters.

    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 67%, moderately high. The description mentions feed and date range but does not elaborate on domainName, template, or outputFormat beyond what the schema provides.

    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 clearly states the tool exports company card transactions for a given feed and date range, including unreported transactions. It distinguishes from sibling tools like expensify_export_reports by specifying card transactions.

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

    Usage Guidelines3/5

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

    The description implies the tool is used for exporting card transactions and mentions a two-step process with download_file, but it lacks explicit guidance on when to use this versus alternatives like expensify_export_reports.

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

  • Behavior4/5

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

    Annotations show destructiveHint=true and readOnlyHint=false. The description adds critical context not in annotations: 'WRITES to Expensify. Dry-run is currently ON — this will preview only.' This clearly discloses the mutation and temporary preview mode, exceeding what annotations alone provide.

    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?

    Two concise sentences: the first states the action and key identifier, the second adds essential behavioral context about write and dry-run. No filler, all sentences earn their place.

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

    Completeness3/5

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

    The description covers the action and dry-run behavior but omits details about the response format, error conditions, or permissions. For a mutation tool with no output schema, more context would be helpful, but annotations partially compensate.

    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?

    The input schema has ~50% description coverage (some parameters lack descriptions). The tool description does not add any parameter-level details beyond the schema, so its value is marginal. With moderate schema coverage, a baseline score of 3 is appropriate.

    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 clearly states 'Modify an existing expense rule by its ruleID', specifying the action (modify) and the resource (expense rule), differentiating from similar tools like expensify_create_expense_rule. The additional note about dry-run further clarifies the current behavior.

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

    Usage Guidelines3/5

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

    The description indicates it is a write operation with dry-run enabled, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., create vs update), or prerequisites like policyID or employeeEmail requirements.

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

  • Behavior3/5

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

    Annotations already declare readOnlyHint=true and openWorldHint=true, covering the tool's safety profile. The description adds the return fields but does not elaborate on behavioral traits such as whether the list is complete, pagination, or rate limits. It does not contradict 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 concise at two sentences, front-loading the purpose and return fields in the first sentence and providing usage context in the second. No wasted words.

    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 simple list tool with two optional parameters and no output schema, the description is fairly complete: it lists return fields and gives usage context. It could mention ordering or pagination, but it is adequate for the tool's simplicity.

    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 coverage is 100%, so the schema already describes both parameters. The description adds no additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

    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 clearly states the tool lists Expensify policies (workspaces) visible to the authenticated account, specifies returned fields, and explicitly positions it as the starting point for obtaining policy IDs, differentiating it from siblings like expensify_get_policy and expensify_create_policy.

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

    Usage Guidelines4/5

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

    The description provides clear usage guidance by stating 'Start here when you need a policy ID for any other tool,' implying it is the primary listing tool. However, it does not explicitly mention when not to use it or contrast with alternatives like expensify_get_policy for fetching a single policy.

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

  • Behavior4/5

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

    Annotations show destructiveHint=true and readOnlyHint=false. The description adds 'WRITES to Expensify' (consistent) and importantly discloses the dry-run behavior, which is not in annotations. This provides critical behavioral context.

    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?

    Two sentences, no wasted words. Front-loaded with purpose, then return value, then important behavioral note. Excellent structure.

    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?

    Given no output schema, the description adequately mentions return of policyID. Annotations cover destructive nature. Dry-run handling is explained. For a simple 2-param tool, this is sufficiently complete.

    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 coverage is 100% with descriptions for both parameters. The description does not add additional parameter meaning beyond what the schema already provides, so baseline score of 3 applies.

    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 clearly states 'Create a new Expensify policy (workspace)' with a specific verb and resource, and distinguishes from siblings like list_policies or get_policy by focusing on creation.

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

    Usage Guidelines4/5

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

    Explicitly notes 'Dry-run is currently ON — this will preview only', guiding the agent to use this tool for preview rather than actual creation until dry-run is disabled. However, no explicit when-not-to-use or alternative tool comparisons.

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

  • Behavior4/5

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

    Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context beyond annotations: it requires domain admin rights and describes the data returned (assignments, bank source, import history). No contradictions.

    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 extremely concise: two sentences, no fluff. The purpose is front-loaded, and every word adds value.

    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?

    Given the tool's simplicity (one parameter, no output schema), the description is largely complete. It covers purpose, content, and a key prerequisite. It could mention pagination or limits, but that is not essential for this low-complexity tool.

    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 coverage is 100%, and the parameter description in the schema is already clear. The tool description does not add additional semantics beyond what the schema provides, so baseline 3 is appropriate.

    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 clearly states it lists domain card assignments with specific details (bank source, import history). The verb 'List' is appropriate and distinct from sibling tools which focus on policies, reports, expenses, etc.

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

    Usage Guidelines4/5

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

    The description specifies a prerequisite ('Requires domain admin rights'), providing clear context. It does not explicitly mention when not to use or alternatives, but given the sibling tools, there is no overlap, so the guidance is adequate.

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

  • Behavior4/5

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

    Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context that the API rejects unknown values, reinforcing the read-only nature and providing behavioral insight beyond 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?

    Two tightly written sentences: first states purpose and output, second provides usage context. No redundant information; every sentence adds value.

    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?

    Given the moderate complexity, the description covers what the tool returns (categories, tags, etc.) and provides a critical use case. The lack of an output schema is acceptable because the description lists return sections. Slightly more detail on response structure could help, but not essential.

    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%; the description adds no additional parameter-level detail beyond listing the fields in prose. Baseline of 3 is appropriate as the schema already documents each parameter.

    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 uses a specific verb ('Fetch') and resource ('configuration for one or more policies') and lists the returned sections. It distinguishes from siblings like expensify_list_policies by implying it retrieves detailed settings and provides a concrete use case.

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

    Usage Guidelines4/5

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

    Explicitly states when to use: 'discover valid category and tag names before creating expenses' and explains the reason (API rejects unknown values). While it doesn't explicitly mention when not to use or list alternatives, the guidance is clear and actionable.

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

  • Behavior5/5

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

    The description discloses that this tool writes to Expensify and sets isTerminated, aligning with destructiveHint=true. It also notes that dry-run is currently ON, providing critical behavioral context beyond 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?

    Three concise sentences: purpose, implementation, and a dry-run warning. No redundant words, and key information is front-loaded.

    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?

    Given no output schema, the description explains the action, mechanism, and current dry-run state. It could mention success responses or error conditions, but overall it's fairly complete for this tool's simplicity.

    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 coverage is 67%, and the description adds some context (e.g., how removal works via isTerminated) but does not elaborate on parameter meanings beyond what the schema provides. Baseline score is appropriate.

    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 clearly states 'Remove members from a policy,' specifying both the action (remove) and the resource (policy members). It explains the internal mechanism (sets isTerminated) and distinguishes from sibling tools like expensify_update_employees.

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

    Usage Guidelines3/5

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

    The description implies use when you need to remove employees, but does not explicitly contrast with alternatives (e.g., expensify_update_employees). The dry-run note is helpful but not a usage guideline per se.

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

  • Behavior4/5

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

    States it writes to Expensify and is currently in dry-run mode, adding context beyond the annotations (destructiveHint). The matching-by-email behavior is explained.

    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?

    Two sentences plus a note, no fluff. Efficiently conveys the core information.

    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?

    Covers purpose, usage, and behavior. Lacks output description but mentions dry-run preview. Adequate for a mutation tool with no output schema.

    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?

    The description adds that employeeEmail, managerEmail, employeeID are required and explains matching, but much of this is already in the schema. Schema coverage is 67%.

    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 clearly states it adds or updates policy members with specific fields (role, manager, approval limits), and distinguishes from the sibling expensify_remove_employees.

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

    Usage Guidelines4/5

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

    Explicitly mentions the removal alternative and the dry-run mode, but could be more detailed about prerequisites like policy existence.

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

  • Behavior4/5

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

    Annotations (readOnlyHint=true, destructiveHint=false) already indicate safe operation. The description adds context about dependency on export tools, but does not detail behavior if file is missing or size limits.

    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?

    Single sentence with clear front-loading of purpose and no unnecessary words. The structure directly addresses what the tool does and how to use it.

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

    Completeness3/5

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

    The description is adequate for a simple download tool, but lacks details about the output format or content type, which could be helpful since there is no output schema. It covers essential usage context.

    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% with parameter descriptions. The description adds semantic value by linking fileName to previous export outputs, though it does not add extra syntax or format details beyond the 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 clearly states the verb 'download', the resource ('contents of a file'), and ties the tool to specific producer tools (expensify_export_reports, expensify_export_card_reconciliation), distinguishing it from sibling tools that perform other actions.

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

    Usage Guidelines4/5

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

    The description explicitly states the prerequisite: use the filename from export tools. It implies the tool should be used after exports, but does not explicitly mention when not to use or alternatives.

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

  • Behavior5/5

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

    Discloses that it WRITES to Expensify and that a dry-run mode is currently active, which is critical behavioral context not captured by 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?

    Two well-structured paragraphs: purpose, key formatting rules, prerequisite, idempotency, attachment option, and dry-run note. No wasted words.

    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?

    Provides sufficient context for a write tool with no output schema, though it does not describe the response format. Sibling tools and annotations fill gaps.

    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 coverage is 100%, and the description largely reiterates schema descriptions (e.g., amounts in cents, date format). It adds marginal value with usage hints like 'externalID for traceability'.

    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 clearly states the verb 'Create' and resource 'one or more expenses on a user account', distinguishing it from sibling tools like expensify_create_expense_rule.

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

    Usage Guidelines4/5

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

    Provides explicit guidance on prerequisites (categories and tags must exist, call expensify_get_policy), idempotency via externalID, and attachment option. Could be improved by contrasting with other expense creation methods.

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

  • Behavior5/5

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

    Beyond annotations (destructiveHint=true), description adds critical behavioral details: 'WRITES to Expensify. Dry-run is currently ON — this will preview only.' This informs the agent that despite being destructive, current execution is safe and only returns a preview. It also clarifies tag level constraints.

    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?

    Description is extremely concise: three sentences plus a bolded warning. Every sentence adds value with zero waste. The most critical information (dry-run, tag level) is front-loaded.

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

    Completeness3/5

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

    While description covers purpose, usage, and behavioral traits, it lacks information about the response format, especially since dry-run mode returns a preview. No output schema exists, so the description should hint at what 'preview' entails (e.g., list of changes). Also no error handling or permission notes.

    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 already describes all parameters (policyID, tagApprovers, name, approver). The description adds context: 'Pass an empty string as approver to clear one' and 'Tag names must already exist on the policy,' which clarifies preconditions and usage beyond schema descriptions.

    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?

    Description clearly states the action: 'Set or clear the approver for individual tags on a policy.' It specifies the resource (tags on a policy) and the action (set or clear approver), differentiating it from sibling tools like expensify_update_policy_tags which handle tag names or statuses.

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

    Usage Guidelines4/5

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

    Description provides clear usage context: 'Only single-level tags are supported' and 'Tag names must already exist on the policy.' It implies when to use this tool but does not explicitly state when not to use it or suggest alternatives. However, given the sibling tools, no direct alternative exists for this specific operation.

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

  • Behavior5/5

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

    Annotations indicate destructiveHint=true and readOnlyHint=false. The description adds specifics: 'WRITES to Expensify' and 'Dry-run is currently ON — this will preview only,' providing context beyond annotations. No contradictions.

    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?

    Three sentences with no redundancy: first sentence states purpose, second explains actions, third adds behavioral context. Front-loaded and efficient.

    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?

    The description covers purpose, usage, and behavioral traits adequately for a write tool. However, it lacks details on the response format. No output schema exists, so a brief note on expected return would improve completeness.

    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?

    With schema coverage at 67%, the description adds value by explaining the action parameter's effect and noting that maxExpenseAmount is in integer cents. This complements the schema but could include more detail on categories object fields.

    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 clearly states it adds, updates, or replaces expense categories on a policy. It distinguishes between merge and replace actions, which differentiates it from sibling tools like expensify_update_policy_tags.

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

    Usage Guidelines4/5

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

    The description explicitly explains when to use merge vs replace, including a warning about replace's destructive nature. It also mentions the dry-run mode, but does not contrast with other policy update tools.

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

  • Behavior5/5

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

    Description adds beyond annotations: confirms it writes (consistent with readOnlyHint=false), warns of destructiveHint, and adds critical info about dry-run mode and API rejection of non-approved reports. No contradictions.

    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?

    Two concise sentences followed by a brief note. Front-loaded with key action and constraints. No wasted words; every sentence adds value.

    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?

    Given no output schema, description fully covers behavior: dry-run preview, precondition (approved state), side effect (records external payment), and API limitation (only transition). Complete for a 2-parameter tool.

    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 already describes both parameters with 100% coverage. Description does not add additional parameter-level detail but provides relevant context linking reportIDList to approved reports. Baseline 3 is appropriate as schema carries the burden.

    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?

    Clearly states the action: mark approved reports as reimbursed, records external payment, does not move money or approve. Distinguishes from other actions by specifying it's the only supported report-status transition.

    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?

    Explicitly states when to use: only reports already in Approved state; non-approved will be rejected. Mentions dry-run is ON, so preview only. Provides clear context on when not to use (e.g., for reports not yet approved).

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

  • Behavior5/5

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

    Annotations already indicate readOnlyHint=true and destructiveHint=false, but the description adds valuable context: it reveals that the tool generates a file and returns its filename, and it describes the default output columns. This extra detail clarifies the tool's behavioral traits 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.

    Conciseness4/5

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

    The description is relatively concise—a few sentences that front-load the main action. Every sentence contributes meaning, though it could be slightly tightened without losing clarity.

    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?

    Given the parameter count, schema coverage, and annotations, the description feels complete. It explains the output (generated filename), the default CSV columns, and the complementary tool. No output schema exists, but the description provides sufficient detail about return values.

    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?

    With 88% schema description coverage, the schema already handles most parameter meanings. The description adds value by explaining the default column output when 'template' is omitted, which is not in the schema. However, it does not elaborate on all parameters, so a score of 4 is appropriate.

    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 begins with a clear verb+resource: 'Start an export of expense reports and return the generated filename.' It also distinguishes this tool from siblings by stating it is the only API that enumerates reports, making 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?

    Explicit guidance is provided on when to use this tool: for filtering by report IDs, date range, or approval state. It also explains the next step—passing the returned filename to expensify_download_file—and notes that this is the sole way to enumerate reports, effectively directing the agent to this tool over alternatives.

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

  • Behavior5/5

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

    Beyond annotations (destructiveHint: true), description adds a detailed DATA LOSS WARNING explaining that merge replaces tags within groups, and notes that dry-run is currently ON.

    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?

    Three short paragraphs with clear front-loading: purpose, warning, dry-run note. No wasted words.

    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?

    Completely covers purpose, usage, behavioral nuances, prerequisites, and current dry-run state for a mutation tool with no output schema.

    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 baseline is 3. Description adds context about action behavior and the need to include all tags, but mostly reinforces schema fields.

    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?

    Explicitly states the tool adds, updates, or replaces tags on a policy grouped into lists. Distinguishes from sibling tools like expensify_list_policies (read-only) and expensify_update_policy_categories (different resource).

    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: always call expensify_get_policy first and send full existing tag list. Explains when to use merge vs. replace and warns against data loss.

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

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues.
  • Evaluate tool definition quality.

Our badge communicates server capabilities, safety, and installation instructions.

Card Badge

expensify-mcp MCP server

Copy to your README.md:

Score Badge

expensify-mcp MCP server

Copy to your README.md:

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/BilalAtique/expensify-mcp'

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