open-jobsite
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@open-jobsiteSet up a local project for the Maple St remodel and draft a daily log from my field notes."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Open Jobsite
Open Jobsite is an open, local-first construction operations server for goose and other Model Context Protocol (MCP) clients. It turns field evidence into reviewable calculations, daily logs, estimates, and change orders while keeping source references, unit math, assumptions, exclusions, and human approval boundaries visible.
This repository is a working v0.1 grant-proof MVP. It uses synthetic data, makes no network calls, and never sends a message, submits a price, places an order, or approves an artifact.
Why it exists
Field work starts with rough notes, photos, sketches, measurements, receipts, and conversations—not clean database rows. General-purpose agents can draft polished answers while hiding where numbers came from. Open Jobsite takes the opposite approach:
Evidence first: records retain a user-supplied source reference and privacy status.
Deterministic math: quantity tools use decimal arithmetic and expose formulas and intermediate values.
Draft by default: every estimate and change order is explicitly unapproved.
Local and portable: JSON files stay in a user-controlled folder and the tool surface is standard MCP.
Field-shaped workflows: portable skills cover daily logs, scoped estimates, and change orders.
Related MCP server: Estimaite MCP Server
Working flow
Create a local project.
Record a note or measurement with a source reference.
Run a deterministic quantity calculation.
Draft an artifact linked to the evidence ID.
Review and edit the draft outside the server before any external action.
Tools
Tool | Purpose | External side effect |
| Create a local JSON job record | Local file only |
| Record a sourced note, measurement, or media reference | Local file only |
| Read the complete local record | None |
| Area plus stated waste factor | None |
| Rectangular volume in cubic yards | None |
| Whole sheets plus stated waste | None |
| Whole stock pieces plus stated waste | None |
| Draft labor summary linked to evidence | Local file only |
| Draft priced scope with unit math | Local file only |
| Draft scope/cost/schedule change | Local file only |
Financial and job artifacts always return:
{
"status": "draft",
"requires_human_approval": true,
"external_action_performed": false
}Install and test
Requirements: Python 3.12+ and uv.
uv sync --extra dev
uv run pytest
uv run open-jobsite --versionRun the MCP server over stdio:
uv run open-jobsiteSynthetic demo
The demo/ folder contains a synthetic end-to-end workflow, a prompt,
fixed expected results, a Windows goose CLI launcher, and a preflight that
launches the real STDIO server. Run the preflight with:
uv run python demo/run_demo.pyThe preflight is also part of GitHub Actions. It verifies the same evidence, calculation, estimate, daily log, and approval-gate flow intended for a future screen recording. A recording is not included in v0.1.
Data defaults to .open-jobsite-data/. Select another local folder with either
--data-dir PATH or the OPEN_JOBSITE_DATA_DIR environment variable.
Connect to goose Desktop
Build and test the repository first. Then add a custom STDIO extension in goose Desktop with:
Command: the absolute path to
uv(where uvon Windows)Arguments:
run --directory C:\absolute\path\to\open-jobsite open-jobsiteEnvironment: optionally set
OPEN_JOBSITE_DATA_DIRto a private job-data folder
Use only synthetic data in a public demo. The synthetic prompt has been run
through goose CLI 1.46.0 on Windows; see the
verification record. A Berd-local MCP
run has not yet been verified.
Verified v0.1 evidence
As of 2026-08-27:
28 automated tests pass on Windows.
all five synthetic benchmark cases pass, including four exact numeric cases and three approval invariants.
the real STDIO preflight produces 108 square feet, four sheets, a CAD 344.00 subtotal, a CAD 378.40 total, and 6.00 labor hours.
an isolated Windows goose CLI run produced two evidence records and two draft artifacts with the same expected values.
These are narrow software checks, not claims about field accuracy, estimating accuracy, code compliance, or user outcomes.
Example MCP arguments
Complex inputs use typed arrays so goose can see the required fields in the MCP
schema. For draft_estimate, a minimal line_items value is:
[
{
"description": "Synthetic wallboard",
"quantity": 3,
"unit": "sheet",
"unit_cost": 18.5,
"evidence_ids": ["ev-example"]
}
]The evidence ID must already exist in the same project.
Repository map
src/open_jobsite/: deterministic core, local store, artifacts, MCP toolsskills/: portable field-workflow instructions for goosebenchmark/: synthetic, machine-readable evaluation casesdemo/: reproducible preflight, Windows goose launcher, and recording planexamples/: a synthetic example project recordtests/: core and in-process MCP protocol testsdocs/architecture.md: component and trust-boundary designdocs/threat-model.md: current risks and mitigations
Safety and limitations
This alpha is not estimating, legal, contract, tax, structural, code, or safety advice. It does not inspect site conditions, validate plans, optimize cuts, confirm prices, or replace a qualified professional. A correct calculation can still be based on a wrong measurement or assumption. Review all output against current drawings, contracts, codes, manufacturer instructions, and field conditions.
Do not put tenant names, addresses, credentials, private photos, client records,
or proprietary price data into public examples or bug reports. See
SECURITY.md and docs/threat-model.md.
Roadmap
Q1: stable schema, 25 benchmark cases, CI, Windows goose/Berd demo, upstream goose contribution
Q2: voice/photo/PDF adapters, bilingual workflows, provenance review MCP App, three safely documented pilots
Q3: revision history, change detection, local price-book adapters, security hardening, three external pilots
Q4: v1.0, 50+ benchmark tasks, usability study with five field users, maintainer documentation
See CONTRIBUTING.md to participate. Apache-2.0 licensed.
Available Tools
10 toolscalculate_concrete_volumeC
Calculate cubic yards for a uniform rectangular pour; not engineering advice.
| Name | Required | Description | Default |
|---|---|---|---|
| depth_in | Yes | ||
| width_ft | Yes | ||
| length_ft | Yes | ||
| waste_percent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not mention side effects, determinism, or safety. The disclaimer 'not engineering advice' is a quality caveat, not behavioral disclosure. The tool is a pure calculation but that is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise and front-loaded, effectively stating the core function in one sentence. However, it omits necessary details like parameter units and waste_percent, making it too sparse to be fully useful. The caveat adds a slight disclaimer but no operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple volume calculation, the description lacks essential input details (units, waste_percent meaning). An output schema exists, so return values are covered, but input semantics are incomplete. An agent would need to infer parameters from the formula, which is not explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It only implies that length, width, and depth relate to volume, but does not explain units, the waste_percent parameter, or its default. No specific parameter semantics are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes cubic yards for a uniform rectangular pour, a specific verb-resource pair that distinguishes it from sibling calculations (sheet count, linear pieces, surface area). The caveat 'not engineering advice' adds a clear scope boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this versus alternatives. The description only implies it is for uniform rectangular pours, but does not address non-uniform shapes or when to choose other calculations. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_linear_piecesC
Calculate whole stock pieces for a linear requirement.
| Name | Required | Description | Default |
|---|---|---|---|
| waste_percent | No | ||
| piece_length_ft | Yes | ||
| required_length_ft | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. 'Calculate' implies a read-only, side-effect-free operation, and 'whole stock pieces' suggests integer rounding. However, it does not disclose how waste_percent affects the result, what rounding convention is used, or whether units must match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. It is appropriately compact, though the brevity comes at the cost of behavioral and parameter detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a calculation tool with three parameters, no annotations, and 0% schema coverage, the description is too thin. It does not explain the role of waste_percent, the rounding logic, unit consistency, or how to choose between this and the other calculation tools. The presence of an output schema helps but does not make up for the missing usage and parameter context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no parameter-specific meaning. It does not explain required_length_ft, piece_length_ft, or waste_percent, nor how they interact to produce the whole-piece count. The property titles alone are not enough to fully disambiguate semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Calculate') and a clear resource ('whole stock pieces for a linear requirement'). It distinguishes itself from sibling tools like calculate_sheet_count and calculate_concrete_volume by scoping to linear materials, though it could be more explicit about the actual output being a number of pieces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as calculate_sheet_count or calculate_concrete_volume. The only clue is the word 'linear,' which implies the intended context but leaves the agent to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_sheet_countB
Calculate whole sheet count with explicit sheet dimensions and waste.
| Name | Required | Description | Default |
|---|---|---|---|
| area_sq_ft | Yes | ||
| waste_percent | No | ||
| sheet_width_ft | No | ||
| sheet_length_ft | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether the result is rounded up to whole sheets, how waste_percent is applied, or any edge-case behavior such as zero or negative area. 'Whole sheet count' hints at rounding but does not make it explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the core action and the two key calculation inputs ('sheet dimensions' and 'waste') economically.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple calculator with an output schema and defaulted parameters, this is minimally viable: an agent can infer the intended inputs and purpose. However, the lack of formula-level detail, rounding behavior, and usage guidance leaves notable gaps for a tool that has no annotations or schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's silence. It mentions 'sheet dimensions and waste,' which maps loosely to sheet_width_ft, sheet_length_ft, and waste_percent, but it does not explain area_sq_ft or clarify how the parameters interact in the calculation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Calculate') and the output resource ('whole sheet count'), and the phrases 'explicit sheet dimensions and waste' signal the tool's calculation scope. This is distinct from sibling tools like calculate_surface_area or calculate_linear_pieces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as calculate_surface_area or calculate_linear_pieces. The description states what it computes but not the context or exclusions that would help an agent choose it confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_surface_areaA
Calculate rectangular area in square feet, including a stated waste factor.
| Name | Required | Description | Default |
|---|---|---|---|
| width_ft | Yes | ||
| length_ft | Yes | ||
| waste_percent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It correctly identifies this as a calculation and mentions the waste factor, but it does not clarify whether the result includes waste in the total, how waste_percent is applied, or any rounding/edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It conveys the action, object, unit, and special input requirement efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple arithmetic tool with an output schema, the core purpose and units are present. However, waste-factor semantics and guidance about when to choose this over related calculate_* siblings are missing, leaving the definition adequate but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It adds 'rectangular' and 'square feet' to clarify length_ft and width_ft, and 'waste factor' maps to waste_percent, but it does not explain the percentage semantics or the default behavior. This is only partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('Calculate'), a concrete resource ('rectangular area'), and a unit ('square feet'). The waste-factor clause further differentiates it from sibling tools like calculate_concrete_volume and calculate_linear_pieces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call this when you need rectangular area with a waste factor. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named, so the agent must infer routing from the description and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectB
Create a new local project. Use a lowercase, non-sensitive project_id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| project_id | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must communicate behavioral context. It only discloses creation and locality; it does not explain side effects, behavior on duplicate project IDs, persistence guarantees, or permissions. The project_id constraint adds minor guidance but is not enough for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler, and it front-loads the core action before the naming constraint. Every sentence earns its place, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the output schema exists, the tool has no annotations and 0% parameter schema coverage, which raises the burden on the description. Missing context includes overwrite/conflict behavior, whether creation can fail, and required inputs beyond a terse project_id hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three parameters. It adds one useful constraint for project_id (lowercase, non-sensitive) but leaves name and description entirely unexplained, including their purpose or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('a new local project'), and the word 'local' distinguishes it from any remote or cloud project concept. Among siblings like get_project and draft_estimate, its role is immediately apparent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when creating a new project, and contrasts implicitly with get_project for retrievals. However, it never explicitly states when not to use it or mentions alternatives, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_change_orderC
Save a draft change order with structured lines and an approval gate.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| reason | Yes | ||
| currency | No | CAD | |
| exclusions | No | ||
| line_items | Yes | ||
| project_id | Yes | ||
| assumptions | No | ||
| evidence_ids | Yes | ||
| schedule_impact_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It communicates that this saves a draft and involves an approval gate, but it does not disclose whether existing drafts are overwritten, whether the project must already exist, what happens on validation failure, or what side effects are triggered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the core action and adds one clarifying constraint, which is appropriately concise for a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has nine parameters, several with defaults or nullable fields, zero schema description coverage, and no annotations. The one-sentence description is far too thin to guide an agent in selecting and populating this tool correctly, even with an output schema available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description names no parameters. It says 'structured lines' but does not clarify required identifiers like project_id and evidence_ids, currency defaults, or how the approval gate relates to the line items. With nine parameters, this is not nearly enough compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Save a draft change order') and distinguishes it from sibling tools like draft_estimate and draft_daily_log by naming the change-order resource. The phrase 'structured lines and an approval gate' adds useful purpose-level detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, and no mention of alternatives. An agent cannot tell from the description whether to choose this over draft_estimate or record_site_evidence beyond the resource name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_daily_logC
Save a draft daily log with worker identifier, role, and hours entries.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | ||
| workers | Yes | ||
| work_date | Yes | ||
| exclusions | No | ||
| project_id | Yes | ||
| assumptions | No | ||
| evidence_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only says 'Save a draft daily log.' It does not explain whether this is a mutating operation, whether it can overwrite an existing draft, whether it is reversible, or what 'draft' implies for downstream workflows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant wording and is appropriately front-loaded. However, it is too terse for a tool with seven parameters and zero annotation support, so brevity comes at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema reduces the need to describe return values, but the description omits semantics for most required parameters, the meaning of evidence_ids, and the behavioral implications of saving a draft. This is insufficient for safe, correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that worker entries include identifier, role, and hours, but it does not explain required top-level parameters such as project_id, work_date, summary, evidence_ids, or the optional exclusions and assumptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Save') and a distinct resource ('draft daily log'), clearly separating it from sibling drafting tools like draft_estimate and draft_change_order. It also hints at the content of the log by naming worker entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The description only states what the tool does, leaving selection entirely to the tool name and context signals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_estimateA
Save an auditable draft estimate; never send, approve, or accept it.
Each line item requires description, quantity, unit, and unit_cost, with an optional evidence_ids array.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| currency | No | CAD | |
| exclusions | No | ||
| line_items | Yes | ||
| project_id | Yes | ||
| assumptions | No | ||
| tax_percent | No | ||
| evidence_ids | Yes | ||
| contingency_percent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It does disclose a key behavioral trait: the operation only saves a draft and never sends, approves, or accepts it, and 'auditable' implies persistence with an audit trail. However, it does not mention permissions, idempotency, or behavior when project_id is invalid, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The main action and constraint are front-loaded, and the second sentence efficiently delivers the only non-obvious parameter detail: line item requirements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values do not need explanation. However, with no annotations and a 9-parameter input, the description only partially covers usage context and parameter semantics; top-level required fields and explicit sibling alternatives are left to the schema and tool name. It is reasonably complete for a straightforward draft-save operation but not thoroughly contextual.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate; it does so for the line_items object by listing required fields (description, quantity, unit, unit_cost) and noting evidence_ids is optional at that level. It does not explain top-level parameters such as project_id, title, currency, tax_percent, or contingency_percent, although their names are fairly self-explanatory. This is partial compensation, not complete coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Save') and resource ('auditable draft estimate'), making the primary action unmistakable. It explicitly delimits scope with 'never send, approve, or accept it', which clearly distinguishes it from any finalization or approval workflow. Given the sibling tools are different resource types (change order, daily log, project), this is sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool to persist a draft estimate that must not proceed to sending, approval, or acceptance. However, it does not explicitly name sibling alternatives or state conditions for choosing this tool over them, such as 'use draft_change_order for change orders'. The usage guidance is mostly implied by the resource name and the negative boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectA
Read the complete local project record.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. 'Read' clearly signals a non-mutating operation, and 'complete' indicates the full record is returned. It does not cover error behavior when the project is missing, but for a simple getter this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that earns its place. It front-loads the action ('Read'), the object ('complete local project record'), and the scope ('local') without any filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one clearly named parameter and an output schema present, the description provides sufficient context. It does not need to explain return values, and the main omission—explicit usage boundaries—is minor for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only 'project_id' with no description, and the tool description adds no parameter-specific guidance. The parameter is self-explanatory from its name and the tool's purpose, but the description does not compensate for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('complete local project record'), making the tool's purpose immediately clear. It also distinguishes itself from the sibling tools, which are all calculation, creation, or drafting operations rather than retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies that the tool is used to retrieve an existing project's full local record, providing enough context for an agent to select it over creation or calculation tools. However, it does not explicitly state when not to use it or mention alternatives by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_site_evidenceC
Record sourced evidence locally; this performs no upload.
evidence_type must be document, measurement, note, photo, receipt, sketch, or voice_transcript. publication_status must be private, synthetic, or permission_cleared.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| project_id | Yes | ||
| evidence_type | Yes | ||
| source_reference | Yes | ||
| publication_status | No | private |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully states that evidence is recorded locally and that no upload occurs, but it does not mention idempotency, whether records can be overwritten, prerequisites like existing projects, or any local side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the most important behavioral fact. The second sentence repeats schema enum info but remains brief, so the overall structure is still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no annotations, the description is incomplete. It explains no semantics for three key parameters and gives no usage context, leaving the agent uncertain about what valid content or source_reference values look like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate for the undocumented parameters. Instead, it merely restates the enum values already present in the schema for evidence_type and publication_status, and it provides no explanation of project_id, source_reference, or content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Record sourced evidence') and a scoping constraint ('locally; this performs no upload'). This clearly differentiates it from the calculation and drafting siblings, though it does not name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives, or when not to use it. The only contextual hint is the local/no-upload behavior, which is a behavioral fact rather than a usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
calculate_concrete_volume - First observed
calculate_linear_pieces - First observed
calculate_sheet_count - First observed
calculate_surface_area - First observed
create_project - First observed
draft_change_order - First observed
draft_daily_log - First observed
draft_estimate - First observed
get_project - First observed
record_site_evidence
TDQS
Scored across 10 tools
Each tool targets a distinct construction or project-management action: four different calculation types, project creation/reading, evidence recording, and three distinct drafting operations. There is no meaningful overlap between the calculation tools or draft tools because the descriptions clearly differentiate their inputs and outputs.
All tool names follow a consistent snake_case verb_noun pattern, such as calculate_concrete_volume, create_project, record_site_evidence, and draft_estimate. This makes the tool set predictable and easy for an agent to navigate.
Ten tools is well within the ideal range and fits the server's scope: calculations, project records, evidence, and draft documents. Each tool has a clear purpose and none feel redundant or excessive.
The core workflow is well covered: create and read a project, record evidence, draft logs/estimates/change orders, and perform common material calculations. However, there are no update/delete project operations or direct evidence retrieval/list endpoints, which leaves minor workflow gaps.
Maintenance
Related MCP Connectors
Construction takeoff and estimating for AI agents. Measure a drawing PDF, export a priced estimate.
Auditable construction takeoffs with locked waste and conservative purchase rounding.
- AgineraOAuthai.aginera
Turn construction drawings into takeoffs, measured routes, schedules and estimates.
Capture extra work on a jobsite and file it into Procore as a Change Event on real budget codes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables multi-project workspaces to share structured notes, API contracts, and handoff messages via a local SQLite database, with versioning and read tracking.GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform construction takeoff and estimating from drawing PDFs, including upload, scale calibration, trade-based takeoff, pricing, and proposal export.MIT
- AlicenseBqualityCmaintenanceEnables local engineering workflow management by consolidating tickets, QA evidence, time tracking, root cause investigation, knowledge, and reporting into a single SQLite database, allowing generation of complete ticket packages for handoffs, dailies, or career evidence.234 npmMIT
- AlicenseBqualityBmaintenanceEnables coding agents to conduct local criminal case file review by parsing PDF volumes, recording facts and evidence with source citations, and generating structured Word review notes and Excel indexes without uploading files.25MIT