Any AI tool that supports MCP can connect to Forge. This page has the steps every tool shares.
Pages for particular tools
No tool has its own page yet. A tool gets one after Forge has connected it once and recorded how it went, so every step and picture on it is real. Until then, the steps below are the ones every tool shares.
What you need
- Data access available for your company. It starts on; if someone turned it off, an owner or admin can enable it again in Settings.
- To be an owner, admin, project manager or estimator of the company you want to connect. A project manager or estimator connects to read only, through the tools marked for them below, and sees only what Forge shows them in the app.
- The connector address, which you paste into your AI tool:
https://api.forge.equipment/mcp
Connect with the tool's own sign-in
- In your AI tool, add a custom connector and paste the connector address. Tools name this step differently, and some call it adding an MCP server.
- Start the connection from inside your AI tool, never from a link somebody sent you. The tool opens a Forge page in your browser.
- Check the page before you do anything else. The address bar shows
app.forge.equipment, and the line "After you choose, you'll go back to" names the tool you started from. See how verification works. - Sign in with your normal Forge login.
- Pick one company. Companies you cannot connect are greyed out with the reason, such as "Data access is off".
- Read what the tool can access. Leave the optional edit choice off for read access only, or select it after reviewing the listed changes. Then choose Allow read access or Allow read and edit access.
- Go back to your tool. It is connected. Forge tells you and the company owner by email, or by a push notification and a notice in Forge for anyone with no email address.
The connection is then listed in Forge, in Settings, for every owner and admin of the company, with when it was last used. If you choose Cancel instead, nothing is shared.
Use an API key instead
An API key works on both doors: the public API and the MCP server. It reads the same data through either one and can only read: an API key can never make changes. Its reads go into the same record, and revoking it stops it on both at once.
- Keys are created only on the web, by an owner or admin, in Forge, in Settings. The Forge app on a phone lists keys and revokes them, but does not create them.
- Forge shows a new key once. Copy it then. Every key starts with
fgo_key_. - A tool that lets you add a header to its requests can use a key on the MCP server instead of signing in: send the header
Authorization: Bearerfollowed by the key, to the connector addresshttps://api.forge.equipment/mcp. - A key belongs to the person who created it, for one company. It stops working when that person leaves the company or stops being an owner or admin, when data access is turned off, or when any owner or admin revokes it. It does not expire on its own, so revoke a key nobody uses.
- Anyone who has a key can read your company's data with it. Give it only to people and software you have chosen.
If you own more than one company
Each connection reads one company, the one you pick on the Forge page. To read a second company, connect again and pick the other company. If your AI tool will not add the same connector address twice, connect one company at a time: end the connection, then connect again and choose the other company.
Plans and organisations
- Some AI tools allow only one custom connector on a free plan. If yours does and you already use one, remove it or change plans before you add Forge.
- In an AI tool your organisation runs, only the organisation's owner may be able to add a connector. Ask them to add Forge. Adding it connects nobody's Forge company: each Forge person who uses it still signs in to Forge and approves the connection for their own company, and that connection belongs to them.
What your AI tool can ask Forge
These are the tools Forge offers an AI tool. The list is built from Forge's own tool list, so it matches what your tool is offered, and it marks any tool that is not open yet. Some tools only read. The ones marked as changes edit your company's records, and only for a connection an owner or admin allowed to make changes; an API key can never use them, and every change is recorded. See reads and edits.
find_jobs
Find jobs
Find the company's jobs by name or client text, stage, status or last update, or by the id another system holds for the job (externalSystem and externalId, as stored with link_external_id).
Owners, admins, project managers and estimators can use this tool. A project manager or estimator sees only what Forge shows them in the app.
What it takes
querystringText matched against the job name and the client's name.
stageone of presale, pre_construction, active, closedOnly jobs at this stage.
statusone of active, archivedOnly active or only archived jobs.
updatedSincedate and time (ISO 8601)Only jobs updated at or after this time, as an ISO 8601 date-time.
externalSystemstringWith externalId: only the job linked to that id in this other system, named the way link_external_id stored it (lower case).
externalIdstringWith externalSystem: the other system's job id.
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
limitwhole number, 1 to 100, default 20How many items to return: 20 by default, at most 100.
get_job
Get a job
Read one job: its summary, its current documents and their status labels, the project description and whether Forge or a person wrote it, the job type and permit flag from the current scope, hasScope (true once a person has confirmed the job's scope), the job's areas with their photo counts and trades, and one page of its photos.
Owners, admins, project managers and estimators can use this tool. A project manager or estimator sees only what Forge shows them in the app.
What it takes
jobIdstring, requiredThe job's id.
photoCursorstringThe photos.nextCursor value from the previous page. Omit it to start at the beginning.
photoAreastringOnly photos filed to this area: its slug or its label, any case. Only photos that have been filed (by a person or the walk's area timeline) can match.
photoTradestringOnly photos filed to this trade. Only photos that have been filed (by a person or the walk's area timeline) can match.
includeHiddentrue or false, default falseInclude photos a person hid. False by default.
list_estimates
List estimates
List the company's current estimates with their totals, for questions such as which jobs are waiting on an estimate.
Only an owner or admin connection can use this tool.
What it takes
statusstringOnly estimates with this status label.
updatedSincedate and time (ISO 8601)Only estimates updated at or after this time, as an ISO 8601 date-time.
viewone of customer, internal, default customercustomer (the default) or internal.
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
limitwhole number, 1 to 100, default 20How many items to return: 20 by default, at most 100.
get_estimate
Get an estimate or change order
Read one estimate, or one change order by its id, current version only: a header and the totals on every page, then one page of its lines.
Only an owner or admin connection can use this tool.
What it takes
documentIdstring, requiredThe estimate or change order's id.
viewone of customer, internal, default customercustomer (the default) or internal.
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
get_scope
Get a scope
Read one scope, a scope_meeting or a scope_document, current version only, section by section with every item.
Owners, admins, project managers and estimators can use this tool. A project manager or estimator sees only what Forge shows them in the app.
What it takes
documentIdstring, requiredThe scope's id.
viewone of customer, internal, default customercustomer (the default) or internal.
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
get_photo
Get a photo
Read one job photo as an image: the resized copy, at most 1568 pixels on its long edge and 1 MB, with a text block naming its id, job, source, caption, phase, when it was taken, and its walk, take, area and trades.
Owners, admins, project managers and estimators can use this tool. A project manager or estimator sees only what Forge shows them in the app.
What it takes
photoIdstring, requiredThe photo's id.
includeHiddentrue or false, default falseInclude a photo a person hid. False by default.
list_walks
List walks and sweeps
List the company's walks and daily sweeps, or one job's, optionally between from and to: kind, the job or jobs covered, when recorded, walk type and job phase, the number of takes, length, whether each has a transcript, audio and video, and whether it has area chapters.
Owners, admins, project managers and estimators can use this tool. A project manager or estimator sees only what Forge shows them in the app.
What it takes
jobIdstringThe job's id.
fromdate and time (ISO 8601)Only walks recorded at or after this time, as an ISO 8601 date-time.
todate and time (ISO 8601)Only walks recorded before this time, as an ISO 8601 date-time.
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
limitwhole number, 1 to 100, default 20How many items to return: 20 by default, at most 100.
get_transcript
Get a walk transcript
Read a walk's or sweep's transcript as time-stamped segments, in the shown language or the original.
Owners, admins, project managers and estimators can use this tool. A project manager or estimator sees only what Forge shows them in the app.
What it takes
walkIdstring, requiredThe walk or sweep's id.
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
takeIdstringThe take's id.
fromSecondsnumberStart of the range, in seconds from the start of the take.
toSecondsnumberEnd of the range, in seconds from the start of the take.
languageone of shown, original, default shownshown (the default) or original, for a translated walk.
get_rate_book
Get the company's rate book
Read the company's master rates: each rate's rateId, table, name, value exactly as stored, amount, the unit it is quoted per, its measurement basis when one is set, where it came from and when it last changed, and the id of any proposal waiting on it.
Only an owner or admin connection can use this tool.
What it takes
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
limitwhole number, 1 to 100, default 20How many items to return: 20 by default, at most 100.
list_rate_proposals
List rate change proposals
List the company's proposed rate changes, newest first: the rate, its value when proposed, the proposed and the recommended amount, every comp with whether it was held out as an outlier and its recency weight, the status (pending, approved, rejected or reverted) and, once decided, when and what was applied.
Only an owner or admin connection can use this tool.
What it takes
statusone of pending, approved, rejected, revertedOnly proposals with this status.
cursorstringThe nextCursor value from the previous page. Omit it to start at the beginning.
limitwhole number, 1 to 100, default 20How many items to return: 20 by default, at most 100.
link_external_id
Link a job to another system's id
Store another system's id on a Forge job so the two stay matched.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
jobIdstring, requiredThe job's id.
systemstring, requiredThe other system, lower case, for example "crm".
externalIdstring, requiredThe job's id in that system.
dryRuntrue or false, default falseTrue answers what would change and changes nothing. False by default.
update_job
Update a job's contact, address, stage or archive flag
Change a job's client contact (name, email, phone), its site address (street, city, state, zip), its stage (presale, pre_construction, active, closed) or whether it is archived.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
jobIdstring, requiredThe job's id.
clientobjectThe client's contact details to change.
addressobjectThe job site address fields to change.
stageone of presale, pre_construction, active, closedMove the job to this stage.
archivedtrue or falseTrue archives a closed job; false unarchives it.
duplicateOfJobIdstringWith archived true: the id of the live job this presale job duplicates. Lets a presale duplicate (no estimate sent, approved or sold) be archived.
dryRuntrue or false, default falseTrue answers what would change and changes nothing. False by default.
update_sweep_segment
Update a daily sweep segment
Change one segment of a daily sweep, named by the segmentId get_transcript gives it: reassign it to another job, set its decision (proposed, confirmed or rejected), and mark it synced with the id of the object you made from it in another system.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
segmentIdstring, requiredThe segment's id, from get_transcript on a sweep.
jobIdstringThe job to reassign the segment to's id.
decisionone of proposed, confirmed, rejectedThe segment's decision.
syncedobjectMark the segment synced with the object made from it in another system.
dryRuntrue or false, default falseTrue answers what would change and changes nothing. False by default.
merge_jobs
Merge duplicate jobs
Fold duplicate jobs into the one you keep: their walks, sweep segments, photos and documents move to the kept job, their other-system ids move with them, and each duplicate is archived and marked merged into the kept job.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
keepJobIdstring, requiredThe job to keep's id.
mergeJobIdsarray, requiredThe duplicate jobs to fold into it, at most 10.
dryRuntrue or false, default trueTrue (the default) answers what would change and changes nothing. Pass false to make the change.
record_estimate_outcome
Record an estimate's outcome
Record whether the company won or lost one of its estimates (or no decision was made), the day it was decided and why, for example after the proposal closed in the company's other system.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
estimateIdstring, requiredThe estimate's id.
outcomeone of won, lost, no_decision, requiredwon, lost or no_decision.
decidedOnstring, requiredThe day it was decided, as YYYY-MM-DD.
reasonvaluedryRuntrue or false, default falseTrue answers what would change and changes nothing. False by default.
record_sent_prices
Record the prices the contractor sent
Record the unit price the contractor actually sent the client for lines of one of the company's estimates, with any quantity or note correction, beside the price Forge generated.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
estimateIdstring, requiredThe estimate's id.
linesarray, requiredThe lines, at most 200, each named by the lineId get_estimate gives it.
dryRuntrue or false, default falseTrue answers what would change and changes nothing. False by default.
record_actual_costs
Record what the work actually cost
Record what work on one of the company's jobs actually cost, per estimate line (estimateId and lineId) or per cost code, as the company's books show it.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
jobIdstring, requiredThe job's id.
costsarray, requiredThe costs, at most 200: each names an estimate line (estimateId and lineId) or a costCode, not both.
dryRuntrue or false, default falseTrue answers what would change and changes nothing. False by default.
propose_rate_change
Queue a proposed rate for a person to approve
Queue a proposed new amount for one of the company's master rates, named by its rateId from get_rate_book, citing the comps behind it: the company's own recorded sent prices and actual costs (record_sent_prices, record_actual_costs), each named by its feedbackId or by its estimateId, lineId and source.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
rateIdstring, requiredThe rate's id, from get_rate_book.
proposedRatenumber, requiredThe amount you propose, in dollars per unit.
unitstring, requiredThe unit the rate is quoted per, which must be the rate's own.
compsarray, requiredThe comps, at most 50, each one of the company's own records. At least 3 different jobs must remain after outliers and old comps are held out.
rationalevaluedryRuntrue or false, default falseTrue answers what would change and changes nothing. False by default.
create_job
Create a job with its client and address
Create a job with its client and site address.
Only an owner or admin connection can use this tool.
Requires an owner or admin connection with edit permission. API keys cannot use this tool. Use dryRun to preview the changes; every applied change is recorded.
What it takes
namestring, requiredThe job's name, as it shows in Forge.
clientobject, requiredThe job's client: matched to an existing client of the company, or created.
addressobject, requiredThe job site address.
stageone of presale, pre_construction, active, closed, default presaleThe job's stage; presale by default.
descriptionstringA short description or scope note for the job.
externalLinkobjectAnother system's id for this job, stored on it at creation.
dryRuntrue or false, default trueTrue (the default) answers what would change and changes nothing. Pass false to make the change.
Photos
get_photo returns a job photo itself, as a resized copy. Whether your AI tool then shows you the photo depends on the tool. This manual says a tool shows photos only after a real connection to that tool has shown one, on that tool's own page above.
Connect only tools you trust
Your AI tool reads what Forge returns word for word. That includes job names, notes, scopes, estimate notes and assumptions, and walk transcripts, and so it includes what your team, your subcontractors and your clients wrote or said.
Text like that can carry instructions meant for the AI tool, planted by anyone who can put words into those places. Forge cannot detect or remove them. Forge tells your tool that everything it returns is data, not instructions, but a tool may still act on what it reads, and most AI tools have other connections that can send email, change files or do other things.
So connect only tools you trust, and keep an eye on what they do with their other connections.