How to discover the G2X tools, read their results, get whole documents and follow analysis runs.
After sign-in, tools/list returns every tool the account can use, with its input schema, output schema and annotations. Treat it as the source of truth: read it when you connect, and check the schema before you build arguments. Record IDs come from earlier results; never construct one.
The tools cover opportunity search across SAM, state and local, DIBBS and SBIR/STTR; contract, IDV, vehicle, protest, forecast and grant records; companies, their relationships and people; opportunity documents; federal supply items; events; and account actions for watchlists, saved searches, pipelines and CRM. For examples by task, see what you can ask. For each tool's purpose, inputs, outputs and an example prompt, see the GovCon MCP tool reference, which is generated from the running server.
Each tool carries MCP annotations. A tool that only reads has readOnlyHint: true. A tool that can overwrite or remove something that already exists has destructiveHint: true; a tool that only adds has destructiveHint: false. openWorldHint: true marks a tool that reaches beyond the account's own data.
Results come back as structured content with a readable summary. Records carry a link to the record in G2X. A list that continues returns a next_cursor; pass it back to get the next page. Every result carries provenance notes, and provisional is true when coverage is partial.
A tool that can't complete a call returns a result with isError: true and a message that says what to change.
Ask for the complete document in Markdown or JSON. A large document arrives in exact parts, each with a cursor to the next, along with the whole document's size and checksum, so you can check that nothing is missing. Keep the document's version and citations with anything you build from it.
Starting a requirements extraction or a fit assessment returns a run ID. Poll g2x_get_analysis_run with that ID: an accepted run isn't a finished result. If a response is slow, resume with the same run ID instead of starting another run.