# Portravo Construction Takeoff

> Review construction plan takeoffs and download reviewed estimates with Portravo account linking.

- name: com.portravo/construction-takeoff
- version: 1.0.2
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 86/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.portravo%2Fconstruction-takeoff
- tools: https://api.protogrid.dev/v1/servers/com.portravo%2Fconstruction-takeoff/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "construction-takeoff": {
      "type": "http",
      "url": "https://portravo.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-17d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 86/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,750 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 10 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 1,750 tokens to load them all
- tool set hash: 730675d79fc9b021168b7a9efb643b5e
- tools last changed: 2026-10-19T16:55:57.437Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.portravo/construction-takeoff.svg)](https://protogrid.dev/servers/com.portravo/construction-takeoff)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `export_reviewed_estimate` changed (description, annotations)
  - before: Get a short-lived Excel XLSX download for an owned Portravo estimate after every takeoff line has been reviewed and the estimate is priced or final. If review is incomplete, return the Portravo review link and let the user complete quantities, assembly mappings and pricing there. Never exports unreviewed estimates.
  - after: Get a short-lived Excel XLSX download for an owned Portravo estimate after every takeoff line has been reviewed and the estimate is priced or final. If review is incomplete, the call returns a review_required error with the Portravo review link, where quantities, assembly mappings and pricing are completed. Never exports unreviewed estimates.
- 2026-10-19 `run_takeoff` changed (description, annotations)
  - before: Run the initial AI takeoff for a new project with an attached plan PDF. This consumes one estimate from the user's existing Portravo balance; ask for explicit credit-use confirmation before setting confirm_credit_use=true. Reuse the idempotency_key on retry to prevent a duplicate charge. Returns extracted quantities for review in Portravo, not a bid-ready estimate. Failed provider runs refund the reservation; existing review work cannot be overwritten.
  - after: Run the initial AI takeoff for a new project whose plan PDF was attached with attach_plan_pdf or uploaded by the user on the project page in Portravo. Consumes one estimate credit from the user's existing Portravo balance; the call is refused unless confirm_credit_use is true. Repeating a call with the same idempotency_key does not charge again. Returns extracted quantities for review in Portravo, not a bid-ready estimate. Failed provider runs refund the reservation; existing review work cannot be overwritten.
- 2026-10-19 `attach_plan_pdf` changed (description, inputSchema, annotations)
  - before: Attach a PDF selected in this conversation as the first plan for a new Portravo project. Only PDF attachments up to 25 MiB are supported. Prefer the host-provided plan download_url/file_id. If unavailable, plan_inline accepts canonical base64 computed from the exact user-uploaded PDF bytes, with file_name and application/pdf mime_type, up to 32 KiB. Supply exactly one of plan or plan_inline; never recreate document bytes from text. Existing plans and review work are protected. Supply a stable idempotency_key and reuse it on retry. Stores the selected PDF privately in the connected account; does not extract or consume credits.
  - after: Attach a PDF the user selected in this conversation as the first plan for a new Portravo project. Plan PDFs must be 10 MiB or smaller. Accepts exactly one of plan, a host-provided download_url and file_id, or plan_inline, canonical base64 of the exact user-uploaded PDF bytes with file_name and application/pdf mime_type, up to 32 KiB. A PDF that has no file link and is larger than 32 KiB is uploaded in the browser at the project's reviewUrl instead. Projects that already have a plan or review work are refused, so existing work is never replaced. Repeating a call with the same idempotency_key returns the original result. Stores the selected PDF privately in the connected account; does not extract or consume credits.
- 2026-10-19 `create_project` changed (description, annotations)
  - before: Create a new construction estimate project in the connected Portravo account. Supply the project name and optional address or supported metro_code. Reuse the same idempotency_key on retry to create exactly one project. Does not run extraction or consume estimate credits.
  - after: Create a new construction estimate project in the connected Portravo account from a project name, an optional address and an optional supported metro_code. Repeating a call with the same idempotency_key returns the original project instead of creating another. Returns reviewUrl, the project page where the user can also upload a plan PDF in the browser. Does not run extraction or consume estimate credits.
- 2026-10-19 `list_pricing_markets` changed (description, annotations)
  - before: List the regional construction pricing markets supported by Portravo before choosing a metro_code for a new estimate.
  - after: List the regional construction pricing markets supported by Portravo. The returned markets are the accepted metro_code values for create_project.
- 2026-10-19 `get_takeoff` changed (description, annotations)
  - before: Read an owned construction project's plan files and extracted takeoff quantities, trades, confidence and human review status. Use this to summarize quantities or identify pending review. Quantities require estimator review before pricing or bidding.
  - after: Read an owned construction project's plan files (attached from chat or uploaded in Portravo) and extracted takeoff quantities, trades, confidence and human review status. reviewRequired reports whether any line still needs estimator review. Quantities require estimator review before pricing or bidding.
- 2026-10-19 `list_projects` changed (description, annotations)
  - before: Find construction projects in the connected Portravo account, including draft, review, priced and final estimates. Returns 50 projects per page. Use nextOffset to continue.
  - after: Find construction projects in the connected Portravo account, including draft, review, priced and final estimates. Returns 50 projects per page; nextOffset is the offset of the next page, or null on the last page.
- 2026-10-19 `get_profile` changed (annotations)
- 2026-10-03 `run_takeoff` changed (annotations)
- 2026-10-03 `attach_plan_pdf` changed (description, inputSchema, annotations)
  - before: Attach a PDF selected in this conversation as the first plan for a new Portravo project. Only PDF attachments up to 25 MiB are supported. Existing plans and review work are protected. Supply a stable idempotency_key and reuse it on retry. Stores the selected PDF privately in the connected account; does not extract or consume credits.
  - after: Attach a PDF selected in this conversation as the first plan for a new Portravo project. Only PDF attachments up to 25 MiB are supported. Prefer the host-provided plan download_url/file_id. If unavailable, plan_inline accepts canonical base64 computed from the exact user-uploaded PDF bytes, with file_name and application/pdf mime_type, up to 32 KiB. Supply exactly one of plan or plan_inline; never recreate document bytes from text. Existing plans and review work are protected. Supply a stable idempotency_key and reuse it on retry. Stores the selected PDF privately in the connected account; does not extract or consume credits.

Full history: https://api.protogrid.dev/v1/servers/com.portravo%2Fconstruction-takeoff/changes

## Remotes

- https://portravo.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (8)

- `attach_plan_pdf`: Attach a PDF the user selected in this conversation as the first plan for a new Portravo project. Plan PDFs must be 10 MiB or smaller. Accepts exactly one of plan, a host-provided download_url and file_id, or plan_inline, canonical base64 of the exact user-uploaded PDF bytes with file_name and application/pdf mime_type, up to 32 KiB. A PDF that has no file link and is larger than 32 KiB is uploaded in the browser at the project's reviewUrl instead. Projects that already have a plan or review work are refused, so existing work is never replaced. Repeating a call with the same idempotency_key returns the original result. Stores the selected PDF privately in the connected account; does not extract or consume credits.
- `create_project`: Create a new construction estimate project in the connected Portravo account from a project name, an optional address and an optional supported metro_code. Repeating a call with the same idempotency_key returns the original project instead of creating another. Returns reviewUrl, the project page where the user can also upload a plan PDF in the browser. Does not run extraction or consume estimate credits.
- `export_reviewed_estimate`: Get a short-lived Excel XLSX download for an owned Portravo estimate after every takeoff line has been reviewed and the estimate is priced or final. If review is incomplete, the call returns a review_required error with the Portravo review link, where quantities, assembly mappings and pricing are completed. Never exports unreviewed estimates.
- `get_profile`: Identify the signed-in Portravo account after OAuth account linking.
- `get_takeoff`: Read an owned construction project's plan files (attached from chat or uploaded in Portravo) and extracted takeoff quantities, trades, confidence and human review status. reviewRequired reports whether any line still needs estimator review. Quantities require estimator review before pricing or bidding.
- `list_pricing_markets`: List the regional construction pricing markets supported by Portravo. The returned markets are the accepted metro_code values for create_project.
- `list_projects`: Find construction projects in the connected Portravo account, including draft, review, priced and final estimates. Returns 50 projects per page; nextOffset is the offset of the next page, or null on the last page.
- `run_takeoff`: Run the initial AI takeoff for a new project whose plan PDF was attached with attach_plan_pdf or uploaded by the user on the project page in Portravo. Consumes one estimate credit from the user's existing Portravo balance; the call is refused unless confirm_credit_use is true. Repeating a call with the same idempotency_key does not charge again. Returns extracted quantities for review in Portravo, not a bid-ready estimate. Failed provider runs refund the reservation; existing review work cannot be overwritten.
