- Brand
- Govly
- Category
- Sales & CRM
- Primary Subcategory
- Government Procurement & Contract Search
Integration details
Description
Govly helps users find and analyze government contracting opportunities, awards, contacts, procurement signals, places, and contract pricing; manage saved searches and inbox matches; and collaborate in workspaces through ChatGPT.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Government Procurement & Contract Search
- Secondary Subcategories
- None listed
- Brand
- Govly
- Access
- Account required
- First tracked
- 2026-09-02
- Tool count
- 94
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Govly
Get updates when Govly’s Discoverability Score or category rank changes.
Competing in ChatGPT Government Procurement & Contract Search
View Category94 tools agents can invoke
Accept a Govly inbox item the user wants to pursue. Opportunities and awards are followed through their default workspace; that action is FINAL and cannot be undone via restore_inbox_item. Signal acceptance is unsupported. The response meta reports workspaceId, finality, and the new state so the action can be audited. Confirm intent before following an opportunity or award.
Apply one or more of the organization's labels to an opportunity, award, contact, or workspace. Labels already on the record are left as is. Any organization member may label a record they can view. Get label ids from list_organization_labels. Use this for requests like "tag this as SEWP" or "label this opportunity High Priority". Use add_record_labels when the user asks to label or tag one specific record; call it once per record. Look up label ids with list_organization_labels first, and create a missing label with create_organization_label only when the user asks for a new one. To take a label off, use remove_record_labels.
Add a user or team member to a workspace, or update one who is already on it. Creates the membership, restores a previously removed one, or changes an existing active member's notifications. Provide exactly one of userId or teamId; both are looked up within the calling user's own organization, so a member from another organization is not found. This cannot remove anyone — use remove_workspace_member for that. Membership belongs to a workspace, not to a record. When the user names an opportunity instead of a workspace, resolve the workspace first: show_opportunity returns its `workspaces` (each with organizationDefault and follows), and list_workspaces returns them by opportunity id. list_workspaces returns only the user's own organization's workspaces; show_opportunity may also include partner organizations' workspaces, identified by each entry's organization.name. If exactly one belongs to the user's organization, use it without asking. If more than one does, ask which workspace before calling; never pick one silently. For any other record type, ask the user for the workspace id. userId and teamId are Govly organization user and team ids. Existing members' ids appear in the opportunity's workspaces[].follows[].member.id. For anyone else in the user's organization, find the id with list_organization_users, matching on name or email, and confirm the match if more than one person fits. There is no team lookup; ask for a team id. Never guess an id. This cannot remove anyone; use remove_workspace_member for that.
Break down awarded government contracts by one dimension, with a count and dollar sums per group over every award that matches the query and filters. Use this instead of search_awards for "who wins the most X", "top vendors by obligated dollars", or "how much has Z spent on W"; use search_awards when the user needs the individual awards. groupBy is one of recipient (the vendor), buyer or funder (the most specific buying or funding organization on the award, usually a contracting or funding office with the agency as a fallback, so one list can mix levels; this is not an agency ranking), contractVehicle, or setAside. To look inside one agency, filter with buyerNames, which matches the agency and everything under it. orderBy picks which groups are returned: count (default) or the largest obligatedAmount, awardAmount, or paidAmount; a "by dollars" question must pass a dollar order or a group whose dollars come from a few large awards can be missing. obligatedAmount is the spend figure; awardAmount includes contract ceilings. Unless meta.timedOut is true, meta.total is the exact number of awards matched (search_awards stops at 10,000); meta.otherCount is how many are not in the returned groups, including awards with no value for the grouping. Group counts and sums can be approximate on large result sets; meta.countErrorUpperBound reports Elasticsearch's bound (-1 when it cannot be bounded) and meta.timedOut is true when the search stopped early; report those results as incomplete, even when no groups were returned. Searches all time unless dateRange is given. searchType defaults to the user's market focus; sled and international require the matching organization subscription, and meta.searchType reports the market actually searched. Non-enterprise MCP access requires a paid Govly seat.
Approve for submission one whole contribution you can access in your organization. Requires awaiting_approval (Needs approval); returns approved_for_submission (Approved for submission), approvedAt, approvedBy (the approver's name) and linesCount. This does not submit the change request. Before calling, show the contribution's scope and proposed CLINs, relevant inferred values, needsReview and skipped-row warnings from show_product_catalog_change_request. Show's createdByCurrentUser flag describes authorship only; it does not limit approval. When it is false, name the contributor from request-level contributions.contributedBy or changeRequest.awaitingApprovalContributions.createdBy in the prompt, for example "Approve Ana's contribution for submission?" Use the contribution ID if the creator is unavailable. A first page is only a page; do not claim every line was displayed. Review further pages when requested. Ask the user to approve these CLINs for inclusion in the change request and wait for a later explicit user approval message. Uploading or extracting a file is not approval. Submission is a separate later action. Pending contributions carry into the next draft after confirmed submission without becoming approved. Saved original request/contribution pairs remain valid; the returned changeRequestId identifies the current request being approved. Repeating approval preserves approvedAt and approvedBy, including after submission. Closed or sending requests refuse new approval.
Archive a catalog's draft change request (for SEWP, a TR), as archiving a TR in Souptools does. Find drafts with list_product_catalog_change_requests. It keeps its contributions and lines, can no longer be edited or sent, and its contract can start a new draft. Only a draft can be archived, and not while a submission or CLIN check is scheduled or running. Restore it with unarchive_product_catalog_change_request. When the organization's contract program profile lists Allowed TR submitters, only those users can archive.
Attach a file to an existing workflow, workspace or workspace comment. For an existing Govly file, use file: {type: "reference", fileRef: "session_attachment:<id>", "workspace_attachment:<id>" or "workflow_attachment:<id>"}. On status attached, link to targetUrl. Text extraction may still be processing. For a product_catalog target, on catalog_required ask "Which contract vehicle should I add this quote to?" Label meta.catalogs choices by contractVehicleName, not the internal catalog name, and pass the selected entry's id as target.id. Do not infer the vehicle from the catalog name. For a new file, the host computes its size and checksum; call with file.type "new" and metadata. An upload_required result is pending, not attached: have the host POST bytes to the signed Govly uploadUrl using exactly requiredHeaders, without OAuth/API-key headers, then call attach_file again with the same target and file: {type: "upload", uploadId}. Never put file contents, base64 file contents, local paths, or remote fetch URLs in arguments. If the host cannot transfer bytes, explain that limitation. On status attached, link to targetUrl. Text extraction may still be processing.
Cancel a scheduled submission of a product catalog change request (for SEWP V, a scheduled TR) before it starts sending. Pass the submissionId returned by submit_product_catalog_change_request or listed by show_product_catalog_change_request. A submission that is already submitting, submitted, or failed can't be canceled. The change request stays a draft and can be submitted again. When the organization's contract program profile lists Allowed TR submitters, only those users can cancel.
Ask the contract program itself to check a draft product catalog change request (for SEWP, a TR) before it is submitted: for SEWP V and SEWP VI this runs CHOP's CLIN List Checker on the organization's login for that contract. It checks only the lines that would send (approved, with no preflight error) at their contract price and CLIN quantity (always 1 on SEWP VI, which has no CLIN quantity), and only after the request's own preflight checks have passed (validate_product_catalog_change_request). It does not submit anything and never blocks submission. It starts at once and returns checkId with status submitting; it usually finishes within a few minutes. Then read show_product_catalog_change_request: changeRequest.clinCheck gives the latest check's status (submitting, submitted when the program answered, failed with a code such as login_failed, navigation_failed, check_failed, launch_failed or check_timed_out), error, warning and unchecked line totals, and stale when the lines that would send changed since the check. Each line of a contribution has clinCheck with its severity (ok, warning, error, unchecked) and message. A new CLIN not yet on contract is expected; a generated CLIN already on contract, a price above SEWP's contract price, or a removal of a CLIN not on contract is an error. Lines without a contract price are not sent and show as unchecked. A check waits for any running check or a TR sent in the last few minutes on the organization's portal login (portal_busy); a TR send never waits for a check. Only allowed TR submitters can run it.
Check the contract program's review of the organization's submitted change requests (for SEWP, TRs awaiting SEWP's review). Starts a background check of the program's status page and returns at once: status checking when a check started, nothing_pending when no submitted change request awaits review and no send has gone 15 minutes without a result, recently_checked when a check started within the last 5 minutes, or unavailable when the catalog's program or portal login can't be checked. awaitingReview lists the change requests checked and their TR numbers. Results land within a few minutes; read them with show_product_catalog_change_request using the changeRequestId. On catalog_required, ask which contract vehicle to check and label meta.catalogs choices by contractVehicleName, not the internal catalog name. Pass the selected entry's id as productCatalogId.
Create an award saved search from structured filters. Stores a replayable search the caller can run later via execute_award_saved_search; award saved searches do not send notifications. The date window is stored as relative day offsets and defaults to the last year.
Create an opportunity saved search from structured filters. The organization receives email notifications when new opportunities match. Federal buyer filtering accepts either exact government-entity IDs or a natural-language buyer description, but not both. The date window is stored as relative day offsets and defaults to the last year; an omitted searchType uses the authenticated user's market focus.
Create a label in the user's organization. Label names are unique per organization, ignoring case. Color defaults to #007bff when omitted. Requires an organization admin on a paid plan.
Add proposals to a contract's shared catalog draft from a workspace quote or a SEWP V or SEWP VI TR template (XLS/XLSX whose first row is TR keywords, one CLIN per row); this does not submit them. They need approval when the contract vehicle's profile requires contribution approval, or when extraction finishes while the draft is being sent; otherwise extraction approves them. Templates preserve supplied fields without AI inference or bundle folding, are read only on a catalog of their own contract vehicle, and allow 5,000 data rows including skipped rows. A SEWP VI template needs CLIN, CLINTYPE, PROVIDER, PARTNUMBER, UNSPSC, ITEMDESC, LISTPRICE and SEWPPRICE columns; blank values stay blank for preflight to flag, except a blank UNSPSC the organization's history can suggest (marked inferred), and a number with stray letters, an EOLDATE other than MM-DD-YYYY, MM/DD/YYYY or YYYY-MM-DD, or a repeated keyword column fails the file with its row or column. Other files use quote extraction with inferred values marked; configured SEWP quote systems become one line (a bundle line on SEWP V). On a SEWP VI catalog each line also gets an inferred CLINTYPE (sewp.clintype), and priced service rows without a part number, other than subtotals, take the row's title as the labor category, plus the quoted rate as list price when it has none and the chosen contract's holder as provider when it names none. Reading runs in the background. Poll show_product_catalog_change_request with both returned IDs, changeRequestId and contributionId, without cursor or perPage until processing ends. Summarize from results and linesCount; polls omit line details. Results cover only that contribution, not the whole shared draft. For both quotes and templates, when extraction reaches awaiting_approval or approved_for_submission, request the first line page with perPage: 25 and immediately show that preview and warnings following show's completion guidance. Only for awaiting_approval, then ask "Approve for submission?" in that response. Do not wait for the user to request a review. Wait for a later explicit user approval message before calling approve_product_catalog_change_request_contribution; the upload or extraction request is not approval. Approval does not submit the change request. Follow show's completion guidance for reporting identifiers, skipped rows, failures and replacement across imports. Only one contribution per actor can process at a time, including templates. Choose contractNumber when the catalog has several contracts. On contract_required, present meta.contracts to the user and ask "Which contract?", showing contractNumber with vendorName and description where available, before retrying; never choose the first by default. A sole contract is automatic. Contributions for different contracts join separate drafts, including imports of the same attachment. A same-attachment template retry replaces only your older contributions for that attachment, workspace, reader and draft after successful saving; failure preserves them. Quote retries replace your earlier contribution at the start. A corrected file uploaded as a new attachment does not replace the old one. If replacement_approval_required or replacement_changed is returned, describe the affected approved or hand-edited contribution IDs and line counts from meta. Warn that replacing them removes their submission eligibility and any lines edited by hand: quotes remove old content immediately and failure does not restore it; templates replace only after successful saving and failure preserves old content. Replacement output needs fresh approval. Wait for a later explicit user approval message, then retry with exactly those replaceApprovedContributionIds. An upload or regeneration request alone is not approval to remove approved or hand-edited content. Rejected (discarded) contributions are never replaced. A successful start does not mean delayed template replacement has already happened. Templates keep the first formatted CLIN and skip repeats, even with different prices. Conflicts with draft lines outside the replacement scope fail the whole incoming contribution without adding items. While a submission is submitting, create returns draft_sending; retry once the submission settles. Get attachmentId from list_workspace_attachments or a workspace_attachment:<id> knowledge entry. For a local file or one attached to this conversation (session_attachment:<id>), first call attach_file with target {type: "product_catalog"} (it returns no targetUrl) and pass the product_catalog_file:<id> fileRef here; that file drafts against its own catalog. Retry while this returns not_ready. On catalog_required, ask "Which contract vehicle should I add this quote to?" and label meta.catalogs choices by contractVehicleName, not the internal catalog name. Pass the selected entry's id as productCatalogId. Do not infer the vehicle from the catalog name or use the public pricing list to choose it. Upload to the opportunity's workspace instead when the quote will be bid: export_product_catalog_bid_files reads only quotes drafted from a workspace.
Add proposed lines by hand to a catalog's draft change request (for SEWP, a TR), for example a CLIN a quote missed or labor categories with no quote file. With contributionId (and its changeRequestId), the lines join that contribution; an approved contribution stays approved. Without it, they collect in your own manual contribution for workspaceId (or for no workspace). When the contract vehicle's profile requires contribution approval, that contribution is unapproved and needs approval before it sends, and once it is approved the next add starts a new one; otherwise it is approved for submission. Without workspaceId only you and the contract's allowed TR submitters can see that contribution; pass workspaceId so the workspace's members can review it. Pass productCatalogId (optional when the organization has one catalog) or the draft's changeRequestId; with productCatalogId the draft is created when missing. On catalog_required, ask which contract vehicle to use and label meta.catalogs choices by contractVehicleName, not the internal catalog name. Pass the selected entry's id as productCatalogId. A catalog with several contracts requires contractNumber when no request is named; on contract_required, ask "Which contract?" and show meta.contracts numbers with vendorName and description where available. A named request keeps its selected contract; a different contractNumber is refused. Older unassigned drafts can be continued by changeRequestId without contractNumber, with or without contributionId; their submission contract is chosen at submission. contractNumber cannot assign or change a named draft's destination. A sole contract is selected automatically. After a submit use productCatalogId and contractNumber or the new draft's changeRequestId, not the submitted request's. Each line gives fields (the names show_product_catalog_change_request returns: itemIdentifier, contractPrice...) and metadata (for SEWP, metadata.sewp.clintype). SEWP V lines require itemIdentifier, manufacturer, manufacturerPartNumber, description, listPrice, contractPrice, metadata.sewp.clintype, metadata.sewp.discountclass, metadata.sewp.discountsubclass, metadata.sewp.maflag. SEWP VI lines require itemIdentifier, manufacturer, manufacturerPartNumber, description, listPrice, contractPrice, unspscCode, metadata.sewp.clintype. Every line names its CLIN (itemIdentifier), and a CLIN already in the request is refused, so after an error or timeout read show before sending the call again. endOfLifeOn can't be set on an added line; use update_product_catalog_change_request_lines. If any line is invalid, nothing is saved and meta.errors lists each row (its index), field and problem. Returns the saved lines with validation unvalidated; checks rerun on their own, so read the outcome with show.
Create a Signal saved search. Signal saved searches run daily and deliver new matching Signals (news, meetings, events) to the creator's Inbox; run one on demand with execute_signal_saved_search. query uses boolean syntax: AND, OR, and NOT in any case, "quoted phrases", and parentheses; separate terms are ANDed. Quote a phrase that uses and, or, or not as ordinary words. Provide query text or at least one filter.
Create a workspace, optionally associated to a visible opportunity as its primary focus. When organizationDefault is true and a default workspace already exists for that focus, update the existing default workspace instead of creating another one. The response includes the workspace's custom field values and url. Link to that url in your response.
Post a Markdown comment to a workspace visible to the authenticated user. On opportunity workspaces, this may email eligible followers and return the workspace to other followers' worklists. Link to the returned workspaceUrl so the user can open the workspace containing the comment. To add a file afterward, call attach_file with target { type: "workspace_comment", id: the returned comment ID }.
Delete a label from the user's organization and return the deleted label. Requires an organization admin on a paid plan.
Remove proposed lines from one contribution on a catalog's draft change request (for SEWP, a TR), so they are not sent. This does not take a CLIN off contract; to do that, set its endOfLifeOn with update_product_catalog_change_request_lines. Unknown line ids fail the call and nothing is removed. Get ids from show_product_catalog_change_request. Returns the removed ids with validation unvalidated.
Discard a contribution from a catalog's draft change request (for SEWP, a TR): all its lines are removed and it stays listed as rejected with who, when and the optional reason. The contributor is emailed when someone else discards it. A contribution still processing can't be discarded. Find contributions with show_product_catalog_change_request without a contributionId.
Dismiss a Govly inbox item, optionally with written feedback or a legacy reason. Removes it from the default inbox without creating a workspace or changing opportunity follow or disinterest state. Written feedback is retained for future analysis; it does not currently change matching. A legacy reason on a Govly AI match can inform future matching. Put the user's stated explanation in feedbackText, preserving their wording. Omit reason unless the user explicitly requests a supported categorical reason; do not derive a category from their explanation. Do not infer or invent written feedback. Use reject_inbox_item to explicitly mark an opportunity not interested instead. Reversible with restore_inbox_item, which marks the retained written feedback withdrawn.
Personally dismiss workspaces for the authenticated user, such as finished or irrelevant work. Dismissed workspaces leave the user's Workspace views and default search_workspaces results until restore_workspaces or new activity brings them back. Shared status, archive state, follow membership, and notification preferences do not change, and other members are unaffected. This is Workspace triage, not Inbox dismissal (dismiss_inbox_item). Returns updatedIds, unchangedIds (already dismissed), and skipped IDs with a reason.
Get a temporary direct-download URL for an authorized document's original file.
Read bounded content from an authorized document. Start with documentType and id, then pass only cursor and optional maxChars while continuing. Available representations are reported by the first read.
Execute an award saved search and return the awards it currently matches. Runs the saved search live against the award index, so results reflect the index at call time rather than a cached match list. The saved search's own date window is applied; meta.dateRange reports the window actually searched.
Execute an opportunity saved search and return the opportunities it currently matches. This reruns the saved search live against the opportunity index, so it answers a different question from list_opportunity_saved_search_results, which returns prior cached match history. Non-enterprise MCP opportunity saved search execution requires a paid Govly seat and is capped at 50 results per page.
Run a Signal saved search and return the Signals it currently matches, using its stored filters, boolean syntax, and sort (newest first by default). Results are every current match, not only new ones. To page, pass meta.nextCursor with the same perPage; a cursor sent with a different perPage is rejected. Paging stops after the first 10,000 matches; meta.truncated is true when the search matches more than that. Non-enterprise MCP Signal saved-search execution requires a paid seat and is capped at 50 results per page.
Write the bid file for a SEWP V opportunity to its workspace: the CHOP CLIN list (clin_file.txt, the same file Souptools exports) for the lines of a vendor quote imported with create_product_catalog_change_request_from_attachment_source that are on contract. This does not generate a quote, attach quote documents, or submit a bid. A quote line matches a current CLIN by CLIN, then by a unique part number. Each CLIN is priced at its SEWP contract price and counted at the quoted quantity (1 when the quote gives none) unless lines overrides it; lines can also add a current CLIN, and excludeClins leaves CLINs out. Every export adds a new workspace attachment and returns its download link. On catalog_required, ask which contract vehicle to use and label meta.catalogs choices by contractVehicleName, not the internal catalog name. Pass the selected entry's id as productCatalogId. Before exporting, confirm the sale prices with the rep: contract prices are the default, not necessarily the bid. After exporting, show the CLIN, price, quantity, price source and warnings of each line, the excluded lines by reason (with candidate CLINs for ambiguous ones), and the download links. Ask the rep to confirm every warned line: price_above_contract fails CHOP's CLIN check unless the CLIN allows variable pricing, and clin_pack_quantity means SEWP prices that CLIN per pack, so the quoted unit count may need dividing. Re-export with corrected lines when the rep changes one. If several quotes were imported, pass attachmentId from the error metadata.
Fetch visible opportunities by Govly ID using the same public shape as the Tools API.
Follow or unfollow a Govly entity. Following creates or reuses the entity's default workspace: the default opportunity workspace for opportunities, the default award workspace for awards, the default contact workspace for contacts. Pass action unfollow to stop following instead. Use this for requests like "follow this opp", "track this opportunity", "follow this award", "track this contact", "subscribe to changes", or "stop following this award".
List award saved searches visible to the authenticated user. Return active saved searches by default. Use active: false for archived-only searches. To include active and archived searches, omit active and send includeArchived: true. An explicit active: true or false takes precedence over includeArchived. Use customFieldFilters to select searches by configured metadata, for example [{key: "process_by_agent", operator: "is", value: true}]. Filters combine with AND before pagination. Repeat the same filters when continuing a cursor. When the user asks for their own saved searches, send mine: true; each result's createdByCurrentUser and followedByCurrentUser say why it matched.
List available government contract vehicles (SEWP, ITES, GSA Schedule, etc.). Returns vehicle names, descriptions, and basic details. Use this to help users understand which vehicles are available for prime contractor searches. Returns at most 50 vehicles per call, sorted by name, with the total matching count in meta; pass a query to narrow the list. List available government contract vehicles. Use this to show users which contract vehicles exist in the system (SEWP, ITES, GSA, etc.). When to use: When the user asks about available contract vehicles, or needs to know which vehicles they can search for primes on. IMPORTANT - Response format: - Present vehicles with name and description - Group by category if relevant - Mention key details like ordering deadlines if available
List the authenticated user's active Govly inbox items, including already-actioned/followed items, newest first. This is not a pending-only list. For pending items, use search_inbox_items with state ["unread", "seen"]; actioned/followed and dismissed items are not pending. Use search_inbox_items for queries or filters, and show_inbox_item for a single item's detail. For why-matched questions, including company-fit follow-ups, use only the origins, matchedKeywords, and meaningful human-readable fitReason returned for that Inbox item ID. Never use another item's metadata to explain the match. A saved-search name identifies the source, not its criteria; missing origins leave the source unknown. Identifiers, scores, and following status are not explanations. If evidence is missing or unusable, say "The available Inbox metadata does not explain why this matched" and stop. Do not add a speculative relevance assessment or recover the reason from record content, NAICS codes, industry norms, or the customer's profile.
List the authenticated user's saved Inbox views with their filters, availability, default selection, and built-in views. This tool does not change Inbox items or the user's default view. Discover view IDs here before passing inboxViewId to search_inbox_items. A view with available false cannot currently be applied; do not remove its unavailable filters or substitute a broader view.
List cached opportunity match history for a saved search visible to the authenticated user. Each row records when a prior matcher run found that opportunity; use execute_opportunity_saved_search for a fresh live rerun instead.
List opportunity saved searches visible to the authenticated user. Return active saved searches by default. Use active: false for archived-only searches. To include active and archived searches, omit active and send includeArchived: true. An explicit active: true or false takes precedence over includeArchived. Use customFieldFilters to select searches by configured metadata, for example [{key: "process_by_agent", operator: "is", value: true}]. Filters combine with AND before pagination. Repeat the same filters when continuing a cursor. When the user asks for their own saved searches, send mine: true; each result's createdByCurrentUser and followedByCurrentUser say why it matched.
List the labels defined in the user's organization. Returns each label's id, name, color, and description, ordered by name. Use the ids when updating or deleting a label. Takes no arguments and is not paginated.
List the people in your current Govly organization, ordered by email. For broad questions about users, lead with meta.summary counts instead of dumping the roster; list names or emails when asked or when you need one to add a workspace member or share a record. Summary includes totalCount, activeCount, deactivatedCount and adminCount across users visible to the caller, independent of the current page. Deactivated means archived; data excludes deactivated users unless includeArchived is set, which only organization admins or system admins may use. Excludes service accounts. Each user has an organization-user ID, name, exact email, role and an active flag that is false when the user is archived, with archivedAt when set. Proactively use this directory to resolve names or initials the user mentions, rather than asking the user to supply ids or emails that this tool can discover. Returns 50 users per page by default, at most 100; follow meta.page and meta.totalPages. Read-only; no confirmation is required.
Enumerate every canonical Govly Place of a category within a jurisdiction — every county in California, every school district in Texas. Use search_places instead to look up a place by name; this tool takes no query and does no relevance ranking. Without sort, ordering is stable but arbitrary and results are cursor-paginated: keep calling with meta.nextCursor until it comes back null, or you have only part of the set — reporting a first page as the complete answer is the most likely way to be confidently wrong here. meta.total is the exact size of the full set, so compare it against what you have collected. Sort client-side if you present a list. With sort "population" and sortDirection "desc" (largest first, default) or "asc" (smallest first), the N most or least populous places are the first N: request perPage N and stop once you hold N. If meta.perPage comes back smaller than N, follow meta.nextCursor until you do. meta.total is then just the size of the category, not a reason to keep paging. Use it for "largest", "most populous", "smallest", or "least populous" questions. Places without a population sort last either way. Population exists only for states (region), counties, and municipalities; a population sort on any other category is rejected. At least one of categories or isoCodes is required. isoCodes matches the place's own code exactly and is not a hierarchy: "US" matches only the country record, so use "US-XX" to enumerate inside a state, while a bare foreign code like "JP" correctly scopes overseas military installations. hasRecords false means the place matches no opportunities or awards, so filtering by it returns nothing. Unlike search_places, this value is computed from live data and is accurate in every environment. population and populationYear are the latest Census estimate and populationHistory the yearly series, present only for states, counties, and municipalities. Place ids are market-agnostic, but opportunity and award searches are market-scoped, so an id returned here may not be searchable under this organization's subscription. Enumerate every canonical Govly Place of a category within a jurisdiction. **When to use**: whenever a user asks about a whole class of places — "every county in California", "all the school districts in Texas" — rather than naming one. Use `search_places` when they name a specific place. **Without `sort`, page to exhaustion.** Results are cursor-paginated: keep calling with `meta.nextCursor` until it comes back null. `meta.total` is the exact size of the full set, so compare it against what you have collected before answering. Reporting a first page as the complete answer is the most likely way to be confidently wrong with this tool — California has 58 counties and 976 school districts, Texas has 254 counties. Ordering is stable but arbitrary, not alphabetical. Sort before presenting a list. **With `sort: "population"`, take the first N and stop.** For "largest" or "most populous" questions add `sortDirection: "desc"` (the default); for "smallest" or "least populous" use `sortDirection: "asc"`. The N places you want are the first N: request `perPage` N and stop once you hold N. If the returned `meta.perPage` is smaller than N, follow `meta.nextCursor` until you do. `meta.total` is then just the size of the category, not a reason to keep paging. Places without a population sort last either way. Population exists only for states (region), counties, and municipalities; a population sort on any other category is rejected. At least one of `categories` or `isoCodes` is required. **Read `hasRecords` before using an id.** False means the place matches no opportunities or awards, so filtering by it returns nothing. Place ids are market-agnostic, but opportunity and award searches are market-scoped — an id returned here may not be searchable under this organization's subscription. Non-enterprise MCP access is capped at 50 results per page.
List the organization's catalog change requests (for SEWP, TRs), newest first, to find a changeRequestId without already knowing it. Each has its status, catalog and vehicle, contract number, line count, and latest submission with its TR number, which is how users usually name a sent TR. Filter by status (draft, submitted, under_review, approved, partially_approved, rejected or archived) and productCatalogId. Only a draft can be archived with archive_product_catalog_change_request, and only an archived change request that was never sent (no submission reached submitted) can be restored with unarchive_product_catalog_change_request. Read one with show_product_catalog_change_request.
List the public government contract price lists (product catalogs). Returns each catalog's id, name, description, group, contract vehicle, and item count, but no pricing. Use this before searching catalog items to discover catalog ids and groups to filter on. Takes no arguments and is not paginated; the catalog set is small.
List the Signal saved searches in the authenticated user's organization, newest first. Each result's canEdit says whether the user created it and can update it; otherFilters names filters set in the web app that these tools cannot read or change.
Get opportunity activity analytics for all users in the organization. Returns counts of opps followed (via manual follow actions) and opps matched (via saved search matches) per user. Useful for understanding team engagement and identifying active vs inactive users. Results sorted by total activity. Get opportunity activity analytics for users in the organization. Shows opps followed and matched per user for 7, 30, or 90 day periods. Use this to understand team engagement with opportunities: - Who is actively following opportunities - Which saved searches are generating matches - Overall team activity levels Results are sorted by total activity (followed + matched) descending.
List attachments for a workspace visible to the authenticated user. Workspace ids come from show_opportunity's workspaces, list_workspaces, or search_workspaces. If you cannot find the workspace the user means, ask; do not guess.
List saved Workspace views visible to the authenticated user, including their definitions, visibility, availability, and default selection. Returns the user's private views and shared organization views. This tool does not change views or the user's default. Discover view IDs here before passing workspaceViewId to search_workspaces. Use the ID rather than copying the definition into search filters. A view with available false cannot currently be applied; do not remove its unavailable filters or substitute a broader view. Definitions include presentation settings, but search returns a flat page of matching workspaces for both Table and Kanban views. The saved page size does not change the search API's pagination defaults.
List workspaces associated with a visible entity, using the same public workspace shape as the Tools API. Currently supports opportunities. Use before add_workspace_member or remove_workspace_member when the user names an opportunity rather than a workspace, to see which workspaces exist for it. Returns only the user's own organization's workspaces, newest first. Opportunities only.
Mark a Govly opportunity as not interested / dismissed for the authenticated user, or undo it. Sets a team-visible disinterested status, unfollows the user, and removes the opportunity from the user's inbox. Use only when the user explicitly expresses disinterest, e.g. "not interested", "dismiss this", "we're not bidding". Pass undo=true to reverse a previous mark; undoing returns the user to a neutral (not following) state. Use mark_not_interested when the user explicitly expresses disinterest in one specific opportunity, such as "not interested", "dismiss this", "hide this", or "we're not bidding"; call it once per opportunity. Marking is team-visible and removes matching items from the user's inbox. Do not use it to merely stop tracking an opportunity the user follows without a verdict; use follow_entity with action unfollow for that. Undo returns the user to a neutral, not-following state and does not re-follow.
Mark a Govly inbox item as a bad fit, optionally with a reason. For opportunities, this records team-visible disinterest and may create a workspace. Use dismiss_inbox_item to hide an item or give feedback without changing opportunity follow state. Reversible with restore_inbox_item.
Remove one or more of the organization's labels from an opportunity, award, contact, or workspace. Labels not on the record are ignored, and other organizations' labels are never touched. Any organization member may unlabel a record they can view. Use this for requests like "untag this" or "take High Priority off this award". Use remove_record_labels when the user asks to take a label off one specific record; call it once per record. Look up label ids with list_organization_labels or the record's show tool. To apply a label, use add_record_labels; to delete a label from the organization entirely, use delete_organization_label.
Govly ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Govly's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Govly alternatives on ChatGPT?
As of 2026-11-02, Govly competes with 1102tools for SAM.gov, AltEditais, Aperture Contracts, askTender, Ausschreibungsagenten.de, Bidaya, BiddingSimple, BidPrime and 46 more in ChatGPT Government Procurement & Contract Search, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.