Skip to main content
Glama
chrischall

freshbooks-mcp

by chrischall

freshbooks_create_project

Create a FreshBooks project for a client, specifying billing model, rate, and due date, with user confirmation required before finalizing.

Instructions

Create a project. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken and makes no network call, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
rateNoHourly rate as a decimal string, when project_type is hourly_rate
titleYesProject title
fieldsNoAdditional raw project fields.
due_dateNoDue date, YYYY-MM-DD
client_idNoClient this project is for
descriptionNo
fixed_priceNoFixed price as a decimal string, when project_type is fixed_price
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
project_typeNoBilling model for the project

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.1.0
    • removedInput schema / properties / confirm
      Removed value: -{
      -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / confirmToken
      Added value: +{
      +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
      +  "type": "string"
      +}
  2. Changed1 schema field changedv0.7.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  3. First observedv0.1.0

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and it discloses the most important non-obvious traits: the first call may make no network call, returns a preview and confirmToken, and requires a confirmed repeat call to actually create. It does not cover auth, reversibility, or side effects beyond creation, but the confirmation protocol is the key behavior and it is well explained.

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 front-loads the core purpose in four words and then compresses the two-step confirmation protocol into a compact, readable passage. Every sentence earns its place, and the reference to MCP_CONFIRM_MODE is a reasonable pointer rather than wasted words.

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?

For a 9-parameter mutation with no output schema, the description is strong on the unusual confirmation flow but silent on the success response shape, error cases, and how to use the nested 'fields' object. The rich parameter schema compensates for much of this, but the definition is not fully complete for an agent that must invoke it independently.

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 high (89%), so the baseline is 3 even with no additional parameter details in the prose. The description adds useful context about the confirmToken lifecycle but mostly mirrors the schema's already-detailed confirmToken description. It does not clarify the undocumented 'description' field or the nested 'fields' structure further, but at this coverage level that is acceptable.

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 opening sentence 'Create a project' names a specific verb and resource with no ambiguity, and the tool name plus sibling list makes it easy to distinguish from create_client, create_invoice, etc. It does not explicitly contrast itself with those siblings or give scope, so it falls just short of a top-tier score.

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 procedural context: it explains the confirmation prompt where supported, and the preview/confirmToken fallback flow with the rule that only a repeat call with the token proceeds. It does not mention alternatives or exclusion conditions, but for a create operation the resource-bound purpose plus confirmation instructions are sufficiently clear.

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