- Brand
- Tango
- Category
- Data & Analytics
- Primary Subcategory
- Government Procurement & Contract Search
Integration details
Description
Tango provides a unified API and MCP for federal procurement data. Tango is built by govcon experts and software developers who understand the pain of stitching together multiple government data sources. Designed specifically for public-sector builders and for AI-ready data consumers.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Government Procurement & Contract Search
- Secondary Subcategories
- None listed
- Brand
- Tango
- Access
- Account required
- First tracked
- 2026-08-08
- Tool count
- 6
- 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 Tango MCP
Get updates when Tango MCP’s Discoverability Score or category rank changes.
Competing in ChatGPT Government Procurement & Contract Search
View Category6 tools agents can invoke
Fetch detailed Tango API documentation for a specific section. Use this when you need information beyond what the tool descriptions provide — for example, the full list of filtering parameters for a resource type, valid enum values, ordering options, response shaping syntax, or advanced query patterns. Args: section: Documentation section to retrieve. Valid values: "budget_accounts", "contract-appeals", "contracts", "dibbs", "ebuy", "entities", "exclusions", "federal-budget", "federal-register", "forecasts", "gsa-elibrary", "idvs", "itdashboard", "lcats", "metrics", "opportunities", "otas", "otidvs", "protests", "resolve", "response-shaping", "sbir", "set-asides", "sled", "subawards", "vehicles" Returns: Dict with the section name and markdown content, or an error with the list of valid sections.
fetch_api_docs
Get detailed information about a single item, with optional enrichment. Use this after search or resolve to drill into a specific entity, contract, IDV, vehicle, opportunity, OTA, OTIDV, organization, protest, SIN, or GSA eLibrary contract. When include_related is true, the tool makes multiple API calls and returns composite data: - entity: profile + socioeconomic status + 10 most recent contracts - contract: full detail + subawards + transactions (modifications) - idv: full detail + child awards + transactions + labor rates (CALC) - vehicle: full detail + awardees (100 per page) + orders. When awardees.next_awardee_page is set, call again with that awardee_page to read the rest, or narrow with awardee_search. - opportunity: full detail. Where SAM.gov posted an award notice it carries awarded, award_date, award_amount, awardee and awardee_uei; on a solicitation, award_count and `awards` list up to 10 recent linked awards, and on an award, solicitation_opportunity_id names the solicitation it answers. An award links to its solicitation only when the award notice references it. The default response lists every attachment by name and resource_id (the manifest). To read the actual document text — the SOW/PWS, Section L instructions, Section M evaluation factors, CDRLs, Q&A — request it (not included on every plan): * attachment_ids="<resource_id>,<resource_id>" pulls full text for just those documents (the targeted, recommended path — pick the PWS/Section L/M off the manifest by name). A selected document always returns text: one larger than the per-call budget arrives in budget-sized chunks — follow attachment_text.partial[].next_offset with attachment_offset to read the rest. * include_attachment_text=true pulls text for ALL file attachments, but a per-call character budget caps the total; documents that don't fit are listed as omitted with their resource_ids so you can fetch them via attachment_ids. Text lands in attachment_text.documents[] (name, resource_id, extracted_text); with attachment_ids the attachment list is cut to name + resource_id. fields narrows the rest of the record. When the account's plan does not include document text, attachment_text says so and the rest of the record still returns. - ota: full OTA detail + transactions - otidv: full OTIDV detail + child OTAs + transactions - organization: organization detail + child organizations - protest: full protest detail + dockets; with include_related: related opportunities and contracts for the same solicitation - contract_appeal: one CBCA/ASBCA Contract Disputes Act decision, keyed by uuid. include_related is a no-op — a decision carries no PIID or UEI to join on. The decision body is not in the default: name it with fields="...,decision_text" (Enterprise only; roughly 100K characters). text_status and text_char_count say on every plan whether a body exists before you ask for it. - sin: MAS SIN detail; with include_related: GSA eLibrary contracts on this SIN (showing Schedule holders). To see a vendor's MAS orders: find their IDV key via search(type="gsa_elibrary"), then use get_details(type="idv", include_related=true) for orders and CALC labor rates. - gsa_elibrary_contract: GSA eLibrary contract detail - itdashboard: Federal IT investment detail by UII. Rich nested context (cio_evaluation, contracts, projects, funding, performance_metrics, etc.) is available via the ``fields`` parameter on Pro/Business+ plans — include_related is a no-op. - naics: NAICS code record + time-series obligation/award metrics over the trailing ``months`` window, bucketed by ``period``. - psc: PSC (Product Service Code) record + time-series metrics (same shape as naics). - budget_account: Federal budget account (appropriations) record; with include_related: quarterly SF-133 cash flow + per-recipient contract-flow detail. - dibbs_rfq / dibbs_rfp: one DLA RFQ or solicitation, keyed by uuid; with include_related: the other DIBBS families sharing that solicitation number (notably the award it produced). - dibbs_award: one DLA award LINE ITEM, keyed by uuid. Its total_contract_price is the whole ORDER's total, not this row's share. With include_related: the solicitation plus sibling_line_items — every row of the same order, which is what makes the order total countable exactly once. - exclusion: one SAM exclusion (debarment) record, keyed by exclusion_key; with include_related: the excluded party's entity profile when they have a SAM registration (many do not). - sbir_topic: one SBIR/STTR topic, keyed by topic_id; with include_related: its parent solicitation, which is where the SBIR-vs-STTR program lives (the topic itself does not carry it). - sbir_solicitation: one solicitation cycle, keyed by solicitation_id; with include_related: the topics under it. - sled_opportunity: one state/local/education solicitation, keyed by opportunity_id, whatever its status — the open-only default applies to the list, not here. With include_related: its observed revision history. `observed_at` is the scrape that saw the change, not the date the agency made it — no state portal emits amendment notices, so resolution is that state's crawl cadence and history starts when Tango began reading the jurisdiction. - forecast: one federal agency procurement forecast, keyed by the numeric id from search_opportunities(type="forecast"). include_related is a no-op — a forecast has no child records. - sled_forecast: one planned state procurement, keyed by forecast_id. include_related is a no-op — a forecast has no revision history and no child records. - federal_register: one Federal Register document, keyed by uuid (a document number also works and resolves to its uuid; pre-2016 numbers can match several). With include_related: the other documents in the same rulemaking, by RIN. The document body is not in the default: name it with fields="...,full_text" (it can run to megabytes, so it is cut at 100K characters). - ebuy: one GSA eBuy request, keyed by rfq_id (e.g. "RFQ1835158"; the buyer's reference number also works). Returns the description, buyer and contracting-officer contacts, line items, amendments and the attachment list. Only requests posted under the account's linked GSA Schedule contracts are visible; any other id is a 404, the same as an unknown one. With include_related: a short-lived (~5 minute) download URL for each stored attachment, up to 10; attachments with is_link=true are outbound links whose doc_path is already the URL. For entity, naics, and psc, the ``months`` and ``period`` arguments control the spending-trend metrics window. Entity metrics and budget flows are returned only with include_related=true; naics/psc metrics are always included. Args: id: The identifier — UEI, contract key, IDV key, vehicle UUID, opportunity ID, forecast id, OTA key, OTIDV key, organization FH key, SIN code, GSA eLibrary contract UUID, IT investment UII, NAICS code, PSC code, budget account id, Federal Register document uuid, or eBuy rfq_id. type: Item type — "entity", "contract", "idv", "vehicle", "opportunity", "forecast", "ota", "otidv", "organization", "protest", "contract_appeal", "sin", "gsa_elibrary_contract", "itdashboard", "naics", "psc", or "budget_account". Note: "subaward" is not supported for get_details; use search with type='subaward' and award_key filter instead. include_related: When true, enriches the response with related data from multiple endpoints. fields: Response shape for the primary item. Comma-separated field names with optional nesting (same syntax as the search tool). Omit for comprehensive defaults. months: Trailing window in months for metrics (entity, naics, psc). Default 24. period: Metric bucketing — "year", "quarter", or "month". Default "year". include_attachment_text: Opportunity only. When true, pulls the full extracted text of ALL file attachments inline (not included on every plan), capped by a per-call character budget. Default false. attachment_ids: Opportunity only. Comma-separated attachment resource_ids (or exact filenames) to pull full extracted text for — the targeted alternative to include_attachment_text when you only need specific documents (not included on every plan). Selected documents are never omitted for size: a document larger than the per-call budget is returned in chunks (see attachment_offset). attachment_offset: Opportunity only, used with attachment_ids. Character offset into each selected document's extracted text — pass the next_offset reported under attachment_text.partial[] to continue reading a document larger than the per-call budget (one document per call is the intended flow). Ignored without attachment_ids. Default 0. awardee_page: Vehicle only, with include_related. Page of the vehicle's awardees (100 per page) — pass awardees.next_awardee_page to list every awardee. Default 1. awardee_search: Vehicle only, with include_related. Narrows the awardees by company name, UEI, PIID or NAICS. Returns: Dict with the item detail and optionally related data.
get_details
Find entities, vehicles, NAICS/PSC codes, GSA MAS SINs, contracts, opportunities, IDVs, OTAs, OTIDVs, subawards, organizations, and GAO bid protests matching a search query. Use this tool first when you have a name or keyword and need to discover what's in the data. Returns identifiers (UEI, organization key, etc.) you can use with other tools, plus a preview of matching contracts, opportunities, and protests. For company questions, resolve first to get UEI + related data including bid protests filed by or against the company. To look up a federal agency or department, use type="organization". Organizations represent the full federal hierarchy (departments, agencies, bureaus, offices) under a single abstraction. Filter by level (0–3), type, or CGAC code via the search tool for more precise results. To look up a GSA MAS SIN (Special Item Number), use type="sin". Returns the SIN title, description, mapped NAICS/PSC codes, and category information. Useful for understanding what services fall under a GSA Schedule SIN code. After resolving a SIN, use search with type="gsa_elibrary" and sin= to find MAS holders — not type="contract" with the SIN's NAICS codes, which returns orders across all vehicles (SEWP, STARS III, etc.), not just MAS. To look up a federal IT investment, use type="itdashboard". Full-text search across itdashboard.gov investment records; returns UIIs (Unique Investment Identifiers) for use with get_details(type="itdashboard"). Args: query: Free text search — company name, organization name, vehicle name, NAICS code or keyword, PSC code, SIN code, etc. type: Optional filter — "entity", "vehicle", "naics", "psc", "sin", "contract", "opportunity", "idv", "ota", "otidv", "subaward", "organization", "protest", or "itdashboard". "idv" searches the award-level IDV records (the contract-family parents, keyed by PIID); "vehicle" searches Tango's curated vehicle catalog — the two are different data, mirroring search and get_details. When omitted, searches all types except itdashboard. limit: Max results per type (default 5). Returns: Matching results grouped by type with identifiers and context.
resolve
Search contracts, IDVs, vehicles, GSA eLibrary Schedule holders, CALC labor rates, OTAs, OTIDVs, subawards, organizations, protests, contract appeals, grants, federal budget accounts, DIBBS awards, SAM exclusions (debarments), SAM entity registrations (vendors), and Federal Register documents. This is the primary data tool. Use it to find contracts by vendor, organization, NAICS code, date range, or keyword. Set include_summary=true for a statistical profile of at most 250 matching records — a hard-capped sample, never a market total. For appropriations / budget questions ("how much was enacted vs. apportioned vs. obligated vs. available?"), use type="budget_account" — this is the only type carrying appropriations-level data (the contract/IDV/subaward types are transactional obligations only). Its default shape includes the full request -> enacted -> apportioned -> obligated -> outlayed lifecycle; call fetch_api_docs("budget_accounts") for ratios/trends/counts (request those via fields=), or fetch_api_docs("federal-budget") for an appropriations primer. For bid protests: use type="protest" with protester_name, outcome, agency (via awarding_org), docket_number, solicitation_identifier, or date range filters. Protests cover three venues — GAO, the Court of Federal Claims (COFC) and SBA's Office of Hearings and Appeals (SBA OHA) — and source_system picks one ("gao", "cofc", "sba_oha"). For disputes UNDER an existing contract (claims, terminations, delay, what is owed): use type="contract_appeal". These are Contract Disputes Act decisions of the Civilian Board of Contract Appeals (CBCA) and the Armed Services Board of Contract Appeals (ASBCA) — a different proceeding from a bid protest, sharing no records with it. keyword searches the full decision text on every plan; reading that text (fields="...,decision_text" on get_details) needs an Enterprise plan. For vendor-population questions ("which 8(a) firms in Maryland do cybersecurity?"): use type="entity" — it filters SAM entity registrations by attributes: socioeconomic/business-type code (pipe-OR supported: socioeconomic="OY|A2"), state, NAICS/PSC, UEI, and CAGE. Socioeconomic values are SAM business-type codes, NOT set-aside codes: e.g. "OY" Black American Owned, "A6" SBA-certified 8(a), "A2" Woman Owned, "8W" SBA-certified WOSB, "XX" SBA-certified HUBZone, "QF" Service-Disabled Veteran Owned, "23" Minority Owned — full table via fetch_api_docs("entities"). For per-entity contract rollups server-side, request the past_performance expansion: search(type="entity", socioeconomic="A6", fields="uei,legal_business_name,past_performance(summary,top_agencies)") — top-5 agencies per entity. Entity search is for population/attribute queries only and deliberately has no name/keyword filter — the SAM directory is full of secondary registrations that make free-text matching a wrong-UEI hazard. To find a company by name, use resolve(query="<name>", type="entity"), which ranks by contract volume so secondary registrations sink. For "is this vendor debarred?": use type="exclusion" with uei, cage_code, or keyword. active=true restricts to exclusions in force today (derived at query time from the activate/termination dates, so a lapsed exclusion is not a change to the record). An entity with no exclusion rows is not excluded. For DLA parts spending: use type="dibbs_award" with nsn, part_number, awardee_cage, or award_number. WARNING — each row is one LINE ITEM, not a whole award, and total_contract_price is the ORDER total repeated on every line item of that order. Never sum it across rows; count each order once (dedupe on award_number + delivery_order_number). For this reason include_summary does not aggregate dibbs_award. Coverage is complete for awards DLA posted on or after 2026-06-09 and partial before that, so an older award can be absent — use type="contract" with piid for those. A delivery order's own number goes in delivery_order_number; award_number is its parent contract. The DIBBS pre-award side (RFQs, solicitations) lives on search_opportunities. Important: when investigating a GSA MAS SIN, do NOT use type="contract" with NAICS/PSC/set-aside filters — contract search cannot filter by parent vehicle type, so results include orders from all vehicles (SEWP, STARS III, etc.), not just MAS. Instead, use type="gsa_elibrary" with sin= to find MAS Schedule holders, then get_details on their IDV key (with include_related=true) to see actual MAS orders and CALC labor rates. Args: type: What to search — "contract" (default), "idv", "vehicle", "all" (contracts + IDVs), "ota" (Other Transaction Awards), "otidv" (Other Transaction IDVs), "subaward", "organization", "entity" (SAM vendor registrations), "protest" (GAO, COFC and SBA OHA bid protests), "contract_appeal" (CBCA/ASBCA contract dispute decisions), "gsa_elibrary" (GSA Schedule holder contracts by SIN), "lcat" (CALC labor rates), "itdashboard" (federal IT investments), "grant" (financial-assistance opportunities), "budget_account" (appropriations: enacted vs. obligated vs. outlayed), "dibbs_award" (DLA parts awards, one row per LINE ITEM), or "federal_register" (rules, proposed rules, notices and presidential documents since 1994). keyword: Full-text search across descriptions and other text. recipient_uei: Vendor UEI. Preferred over recipient_name; use resolve to find it. recipient_name: Vendor name, near-exact including suffixes like ", INC.". On 0 results the tool retries it as a keyword, so a near miss degrades to fuzzy rather than empty. awarding_org: The organization that ran the buy — code, name, or abbreviation. For a whole department use its 3-digit CGAC code ("075" HHS, "097" DOD) or its abbreviation ("HHS", "DOD") — the 4-digit form works for sub-agencies ("7530" CMS, "4732" GSA FEDSIM) but NOT for department roll-ups, where "7500" returns zero results and "9700" errors. A value matching no organization is an ERROR, not an empty result, and resolution is FUZZY, so a near miss can silently scope the query to an organization you did not intend — prefer a code or a UUID from `resolve(type="organization")`. On protest, grant, budget_account, exclusion and itdashboard it is the owning/issuing agency instead, matching every component beneath it, and a value it cannot resolve falls back to a text match rather than an error. funding_org: The organization paying for the work. Usually what you want for mission questions ("HHS's health IT footprint"), because acquisition service providers (GSA FEDSIM "4732", Interior IBC "1406") award a great deal on other agencies' behalf. Same fuzzy-resolution caveat as awarding_org. naics_code / psc_code: Classification code filters. Several codes are joined with '|' (a list or commas also work). naics_code takes full 6-digit codes, not prefixes; resolve(type='naics') expands a prefix. set_aside_type: Set-aside code, e.g. "SBA", "8AN". Call fetch_api_docs("set-asides") for the list. award_type: Award type code. piid / solicitation_identifier: Exact identifier lookups. Ranges follow one convention throughout: `_start`/`_end` for dates (YYYY-MM-DD) and fiscal years, `_gte`/`_lte` for amounts, `_after`/`_before` on the DIBBS and exclusion families. Available here: fiscal_year, fiscal_year_start, fiscal_year_end, award_date_start, award_date_end, pop_start_date_start, pop_start_date_end, pop_end_date_start, pop_end_date_end, expiring_start, expiring_end, obligated_gte, obligated_lte, last_date_to_order_start, last_date_to_order_end. Type-scoped filters — each group applies only to the type named: idv: idv_type ("IDC", "BPA", "BOA", "FSS", "GWAC"). vehicle: vehicle_type ("GWAC", "BPA", "MAS", "MAC"), who_can_use, program_acronym ("OASIS+", "SEWP", "STARS"), total_obligated_min, total_obligated_max, idv_count_min, idv_count_max, order_count_min, order_count_max, contract_type (FPDS pricing code: "J" firm fixed price, "Y" time and materials, "U" cost plus fixed fee, "1" order dependent; "|" for OR). subaward: award_key (parent contract), prime_uei, sub_uei. organization: cgac, parent, level (1=department, 2=agency, 3=bureau), org_type, include_inactive. gsa_elibrary: schedule (e.g. "MAS"), contract_number, sin. `sin` also works on lcat, and is the right way to find MAS holders — NOT type="contract" with the SIN's NAICS codes. lcat: idv_key or entity_uei (one is REQUIRED), labor_category, price_gte, price_lte, education_level, min_years_experience_gte, min_years_experience_lte, security_clearance, worksite, business_size. protest: protester_name, outcome ("Denied", "Dismissed", "Withdrawn", "Sustained"; SBA OHA adds "Granted", "Remanded", "Reversed", "Vacated"; COFC records carry none), docket_number (the base case number: "B-423274" GAO, "26-1391" COFC, "SIZ-6100" SBA OHA), source_system ("gao", "cofc", "sba_oha"), case_type (substring: "Bid Protest: Cost" on GAO; "SIZE", "NAICS", "HUBZONE", "VSBC", "BDPT" on SBA OHA; "|" for OR), naics_code (only SBA OHA size/NAICS appeals carry one), filed_date_start, filed_date_end, decision_date_start, decision_date_end. contract_appeal: board ("cbca", "asbca"), appellant (substring), judge (exact, as the board lists them), decision_type (CBCA only: "Decision", "Dismissal", "Order", "Full Board Order"), docket_number (one docket exactly, pasted as cited — "ASBCA No. 59116" works; OR several with "|", never ","), decision_date_start, decision_date_end, delisted (true for decisions the board's newest listing no longer carries). Sortable by decision_date (default, newest first), appellant, first_listed_at, or rank (needs keyword). itdashboard: awarding_org (every tier), agency_code (Pro+), agency_name (Business+), investment_type, updated_after, updated_before, cio_rating and cio_rating_max (1=high risk, 5=low risk; Business+), performance_risk. grant: cfda_number, funding_instruments, grant_id, opportunity_number, status ("posted", "forecasted"), posted_date_start, posted_date_end, response_date_start and response_date_end (the application due date), applicant_types (eligibility code: "23" small businesses, "22" other for-profits, "12" 501(c)(3) nonprofits, "00" state governments, "06"/"20" public/private higher education, "99" unrestricted), funding_categories ("ST" science and R&D, "HL" health, "ED" education, "ENV" environment). Each takes one code, matched as a substring of the stored list, so a short code like "T" also hits "ST". budget_account: awarding_org, federal_account_symbol, bureau_name, account_title, bea_category ("Discretionary", "Mandatory"), on_off_budget. dibbs_award: award_number, delivery_order_number, nsn, part_number, purchase_request, awardee_cage, total_contract_price_min, total_contract_price_max, posted_date_after, posted_date_before. `award_number` and `nsn` accept "|" for OR. total_contract_price is the whole ORDER's total, so filtering on it is safe but summing it across rows is not. `organization` exists but is always DLA. exclusion: awarding_org (the excluding agency, components included), cage_code, npi, classification_type, exclusion_type, exclusion_program, excluding_agency_code, excluding_agency_name, delisted, activate_date_after, activate_date_before, termination_date_after, termination_date_before, update_date_after, update_date_before, and `active` — true for exclusions in force today, derived at query time, so a lapse is not a change to the record. federal_register: keyword (title, abstract and action; quote a phrase), awarding_org (the issuing agency by code such as "7014" or "070", sub-agencies included; organization, agency_name and agency_code are accepted as the same filter; pass a code with a leading zero as a string), document_number (exact; pre-2016 numbers repeat, so one can match several documents), document_type ("Rule", "Proposed Rule", "Notice", "Presidential Document", "Correction"; "|" for OR; pre-2008 documents are mostly "Uncategorized Document"), posted_date_start and posted_date_end (publication date), effective_date_start and effective_date_end, response_date_start and response_date_end (comment period closes), comments_open (true: closes today or later; undated documents match neither value), cfr_title and cfr_part (e.g. 40 and "52"; cfr_part needs cfr_title), significant (EO 12866), rin (e.g. "2060-AV16", "|" for OR), executive_order_number. Sortable by publication_date (default, newest first), effective_on, comments_close_on, document_number, or rank (needs keyword). Open one with get_details(type="federal_register", id=<uuid>). entity: socioeconomic (SAM business-type codes, pipe-OR), entity_state, zip_code (5-digit, exact), cage_code, recipient_uei, purpose_of_registration_code ("Z2" all awards, i.e. contract-eligible; "Z1" financial assistance only; "Z5" all awards and IGT), obligated_gte and obligated_lte (total contract + subaward obligations to the entity, USD; IDVs and OTAs excluded). sort: Sort field, e.g. "award_date", "obligated"; "posted_date" for grants, "enacted_ba" for budget_account, "decision_date" for contract_appeal. order: "asc" or "desc" (default: desc). limit: Max results (default 25). include_summary: Profiles a hard-capped SAMPLE of at most 250 matching records — no filter escapes the cap, and the response sets is_capped_sample when more match, so these totals are never a market total. org_distribution keys off awarding_office alone, so a summary cannot answer a funding-organization question. For uncapped figures use entity past_performance or an organization's total_obligations / tree_obligations. fields: Response shape — which fields to return per record. Call fetch_api_docs("response-shaping") for the syntax. Returns: Dict with total_count, results list, and optionally a summary dict.
search
Search pre-award procurement — everything you can still bid on. Nine families share this tool because they answer the same question ("what is open?") from different systems: - opportunity SAM.gov notices (default) - forecast planned procurements, pre-solicitation - dibbs_rfq DLA small-purchase requests for quote - dibbs_rfp DLA solicitations (RFP/IFB) - sbir_topic SBIR/STTR research topics - sbir_solicitation SBIR/STTR solicitation cycles (parent of topics) - sled_opportunity state / local / education solicitations - sled_forecast planned state procurements - ebuy GSA eBuy RFQs/RFPs/RFIs posted to GSA Schedule holders All but the two sled_* families are FEDERAL. The two sled_* families are STATE, LOCAL and EDUCATION buyers — a separate market with its own portals, so a federal search never returns them and vice versa. Post-award data lives in `search` instead — including DIBBS *awards* (`search(type="dibbs_award")`). Two date filters are normalized across every family, so the same argument works whatever you are searching: - response_deadline_after/before — when the window CLOSES. Maps to return_by_date (dibbs_rfq), closes_date (dibbs_rfp), close_date (sbir_topic, ebuy), end_date (sbir_solicitation). - first_notice_date_after/before — when it was POSTED/opened. Maps to issue_date (dibbs_rfq, ebuy), issued_date (dibbs_rfp), open_date (sbir_topic), start_date (sbir_solicitation), posted_date (sled_opportunity), estimated_advertisement_date (sled_forecast — a QUARTER START, not a posting date). DIBBS RFQs/RFPs are scoped to a part: filter by `nsn` or `part_number`, not NAICS/PSC (which DIBBS does not carry). SLED coverage is partial and grows one jurisdiction at a time, so a thin per-state result is at least as likely to be a portal Tango does not read as a quiet market. You do not have to go looking: any state-scoped SLED search that comes back thin carries a `_coverage` block with that state's real corpus totals, which is what tells the two apart. Never read a per-state count as market size without it. eBuy (not included on every plan) shows only the requests posted under the GSA Schedule contracts the caller's account is linked to — it is the account's own inbox, not a market-wide feed. An account with no linked contract sees an empty list, not an error, so a zero-result eBuy search checks access and says when the empty result means "cannot see" rather than "nothing posted". `status` is frozen at the last-seen state: GSA only lists active requests, so one that closes stops appearing rather than turning "Closed" — "Open" means open when last seen (see `last_seen`). To find requests still open, filter response_deadline_after=<today> rather than trusting status. Open one with get_details(type="ebuy", id=<rfq_id>) for its description, contacts and attachments. Args: keyword: Search text across titles and descriptions. org: Organization filter — accepts a code, name, abbreviation, or organization UUID (e.g. "VA", "CMS", "075", or a UUID from `resolve(type="organization")`). Matches the organization and all of its descendants, so a department returns records from its sub-agencies and offices. A value that matches no organization is an error, not an empty result — the response carries `error` and `total_count: 0`. Resolution is fuzzy, so a near-miss can match an organization you did not intend and silently scope the search to it; prefer a code or a UUID from `resolve(type="organization")` when the name is ambiguous. For SBIR this is instead the agency's raw text, matched partially — "DOD", "NSF", "HHS" (note NIH topics are filed under HHS). Not used by DIBBS, which is always DLA; use `organization` to narrow within DLA. naics_codes: List of NAICS codes; matches any of them (OR). psc_codes: List of PSC codes; matches any of them (OR). set_aside_types: List of set-aside type codes; matches any of them (e.g. ["SBA", "8AN"]). Call fetch_api_docs("set-asides") for valid codes. active: Filter active/open or inactive/closed records. For opportunities, omitting it searches open notices only, unless solicitation_number, notice_type, awarded or awardee_uei widens it to every notice; pass active=False for closed ones. An open-only search says how many closed notices also match. For DIBBS it maps to the derived `open` flag (computed from the close date at query time, so a record reaching its close date is not a change to the row). For SBIR prefer `activity`, which also exposes the "unknown" bucket that a boolean cannot express. For sled_opportunity, passing neither `active` nor `status` returns open solicitations only; active=False is the complement of open, so it INCLUDES the "unknown" bucket (standing rosters, dateless RFIs). sled_forecast carries no liveness at all and ignores both. notice_type: Filter by notice type. Accepts a single-letter code or a human-readable name; join several with '|' to match any (e.g. 'o|k'). Codes: p (Pre solicitation), k (Combined Synopsis/Solicitation), o (Solicitation), a (Award Notice), m (Modification/Amendment/Cancel), r (Sources Sought), s (Special Notice), u (Justification), i (Intent to Bundle), g (Sale of Surplus Property). place_of_performance: Place of performance text filter over address, city, state, zip and country. Use 2-letter state codes ("CO"); full state names are converted. response_deadline_after: Closing-window lower bound (YYYY-MM-DD). Normalized across families — see the note above for the per-family field it maps to. response_deadline_before: Closing-window upper bound (YYYY-MM-DD). first_notice_date_after: Posted/opened lower bound (YYYY-MM-DD). Normalized across families — see the note above. first_notice_date_before: Posted/opened upper bound (YYYY-MM-DD). last_notice_date_after: Last notice date lower bound (YYYY-MM-DD). last_notice_date_before: Last notice date upper bound (YYYY-MM-DD). ordering: Ordering field (for example: last_notice_date or -response_deadline). awarded: SAM.gov opportunities only. True finds opportunities that carry an award or have award notices linked to them; False finds those that do not. Award data exists only where SAM.gov posted an award notice, so False does not prove nothing was awarded. An award can land on a solicitation that is still open, so this does not change `active`. Unless `active` is also set, it searches every notice, open and closed. awardee_uei: SAM.gov opportunities only. Awardee UEI(s) as SAM.gov published them on the award notice; a list, or several joined by ',' or '|', matches any (OR), case-insensitive. Unless `active` is also set, it searches every notice, open and closed. fiscal_year: Exact fiscal year match (forecasts only). fiscal_year_start: Fiscal year range start (forecasts only). fiscal_year_end: Fiscal year range end (forecasts only). naics_starts_with: NAICS code prefix filter (forecasts only). source_system: Source system filter (forecasts only). status: Status filter. For forecasts: "Draft", "Final". For sled_opportunity: Tango-derived liveness — "open", "closed", "awarded", "cancelled" or "unknown". The open-only default hides "unknown"; reach it with status="open|unknown". For ebuy: GSA's own "Open" or "Cancelled", frozen at the last-seen state, so "Open" is not proof the request is still open. modified_after: Modified date lower bound (YYYY-MM-DD). Forecasts and SLED; on type="opportunity" it is applied as last_notice_date_after. modified_before: Modified date upper bound (YYYY-MM-DD). Forecasts and SLED; on type="opportunity" it is applied as last_notice_date_before. award_date_after: Anticipated award date lower bound (YYYY-MM-DD, forecasts only). award_date_before: Anticipated award date upper bound (YYYY-MM-DD, forecasts only). solicitation_number: Solicitation number filter. For DIBBS this is the DLA solicitation (e.g. "SPE1C126Q0337"); for sbir_topic it selects the topics under a parent solicitation (a DoD cycle name is applied as cycle_name); for ebuy it is the buyer's own reference number (dash-insensitive), not the eBuy rfq_id. nsn: National Stock Number, exact (DIBBS only). Use "|" for OR. part_number: Manufacturer part number, exact (DIBBS only). Use "|" for OR. purchase_request: Purchase request number (dibbs_rfq only). organization: Federal-hierarchy key of the DLA buying organization (DIBBS only). Not the same as `org` — DIBBS is always DLA, so this narrows within DLA rather than selecting an agency. status_code: 11-character composite DIBBS status code, e.g. "DLK00L1N000" (dibbs_rfq only). Unrelated to `status` and to `solicitation_status`. set_aside_flag: DIBBS set-aside flag — "Y" or "N" (dibbs_rfq only). This is a yes/no flag, NOT a set-aside program type; use `set_aside_types` for 8(a)/SDVOSB/etc. on opportunities. quantity_min: Minimum quantity requested (dibbs_rfq only). quantity_max: Maximum quantity requested (dibbs_rfq only). buyer_code: DLA buyer code (dibbs_rfp only). topic_number: SBIR topic number, exact (sbir_topic only). activity: SBIR lifecycle, derived at query time — "open", "closed", or (topics only) "unknown" for topics with no usable date roster. Prefer this over `active` for SBIR, since `active` cannot express "unknown". doc_source: Source document collection (sbir_topic only). year: Solicitation year, exact (SBIR only). Not a fiscal year — use `fiscal_year` for forecasts. program: "SBIR" or "STTR" (sbir_solicitation only). Topics have no program filter; the program lives on the parent solicitation, so filter topics via `solicitation_number` instead. cycle_name: DSIP solicitation cycle, exact (e.g. "DOD_SBIR_2026_P1_CBZ"; sbir_solicitation and sbir_topic). DoD topics carry their cycle here, not a solicitation_number. out_of_cycle: Whether the solicitation is out of cycle (sbir_solicitation only). solicitation_status: sbir.gov's own raw Open/Closed string (SBIR only). This is source data, distinct from the derived `activity` — they can disagree. release_date_after: Release-date lower bound (sbir_topic only). A topic is released, then opens, then closes — this is the earliest of the three, distinct from first_notice_date_*. release_date_before: Release-date upper bound (sbir_topic only). state: Two-letter state or territory code (SLED only). Use "|" for OR, e.g. "TX|OK". jurisdiction: Level of government (sled_opportunity only) — "state", "local", "education", or "unknown" for aggregator rows that cannot tell state from local. solicitation_type: For sled_opportunity, the kind of solicitation — "rfp", "ifb", "rfq", "rfi", "itb", "sole_source", "grant" or "other". A null type (the portal states none) is a distinct answer from "other". For sled_forecast this filters procurement_method instead, which is the portal's own method word, verbatim. has_documents: Whether the record advertises at least one document (sled_opportunity only). category_code: For sled_opportunity, match a commodity code under ANY scheme (NAICS, NIGP, UNSPSC, or the untagged pre-migration strings). Prefer it over `naics_codes`, which only matches the small share of SLED rows tagged NAICS. For sled_forecast this filters procurement_category, the portal's own category word. first_seen_after: When Tango FIRST OBSERVED the record, on or after (YYYY-MM-DD, SLED only). The polling primitive — distinct from first_notice_date_after, which is the portal's own posted date. first_seen_before: First observed on or before (YYYY-MM-DD, SLED only). change_seen_after: When Tango observed the last substantive change (deadline, status, documents, title or content), on or after (YYYY-MM-DD, sled_opportunity only). A scrape date, not an amendment date; unlike modified_after it ignores enrichment. revision_kind: Kind of that last change (sled_opportunity only) — "deadline_change", "status_change", "documents_added", "documents_removed", "documents_replaced", "title_change" or "content_change". Use "|" for OR. incumbent_name: Incumbent vendor name, substring match as the state publishes it (sled_forecast only). Use "|" for OR. rfq_id: eBuy request id, exact, e.g. "RFQ1835158" (ebuy only). Use "|" for OR. request_type: "RFQ", "RFP" or "RFI" (ebuy only). Use "|" for OR. sin: GSA Special Item Number the request was posted under, e.g. "54151S" (ebuy only). Use "|" for OR. schedule: GSA schedule the request was posted under, e.g. "MAS" (ebuy only). Use "|" for OR. buyer_agency: The buying department's name as GSA publishes it, free text (ebuy only). `org` is usually better: it resolves an agency code, name or abbreviation and includes sub-agencies. contract_number: Narrow to the requests visible under one of YOUR linked GSA Schedule contracts (ebuy only). A contract the account does not hold returns nothing, not an error. Use "|" for OR. type: What to search — "opportunity" (default), "forecast", "dibbs_rfq", "dibbs_rfp", "sbir_topic", "sbir_solicitation", "sled_opportunity", "sled_forecast", or "ebuy". limit: Max results to return (default 25). fields: Response shape — specify which fields to return. Valid top-level fields: opportunity_id, title, description, solicitation_number, naics_code, psc_code, set_aside, response_deadline, first_notice_date, last_notice_date, active, award_number, notice_history, office, place_of_performance, primary_contact, attachments, meta, sam_url. Award fields (only where SAM.gov posted an award notice; null otherwise): awarded, award_date, award_amount (text as SAM.gov published it), awardee, awardee_uei, award_count (awards linked to a solicitation), solicitation_opportunity_id (on an award, the solicitation it answers, when the award notice references one). "awards(*)" expands up to 10 recent awards linked to a solicitation (opportunity_id, notice_id, award_number, award_date, award_amount, awardee, awardee_uei); an award is linked only when its notice references the solicitation. Note: use "set_aside" (not "set_aside_type"). For notice type, request bare "meta" — it returns notice_type as a nested object with "code" and "type". "meta" takes no nested selection: "meta(notice_type)" and "meta(notice_type(*))" are both rejected. Use "office(*)" to get agency, department, and office details. Examples: "opportunity_id,title,solicitation_number,response_deadline" "title,office(*),naics_code,set_aside,response_deadline" "opportunity_id,title,meta" Omit for sensible defaults. Returns: Dict with total_count and results list.
search_opportunities
Tell the Tango team how its tools worked for you — your own assessment, not the user's. Call this when a tool made the task harder than it should have been: a result was wrong or implausible, data you expected was missing, a parameter or error message misled you, you needed several retries to find the right call, or the tools could not do what the user asked. Also welcome when something worked notably well. One call per distinct issue, at the moment you notice it; do not wait until the end of the conversation. Do not include secrets or personal details about the user. Args: message: What happened and what you expected instead. Name the calls, parameters, and values involved. category: wrong_data, missing_data, confusing_tool, bug, feature_request, worked_well, or other. tool: The tool the feedback is about (e.g. "search_opportunities"), if any. goal: One sentence on what the user was trying to accomplish. follow_up: True only if the user said they want to hear back about this, or asked to be told when it's fixed. Never ask the user just to fill this in, and never set it on your own judgment. When true, the Tango team may email the account holder once the issue is resolved.
send_feedback
Tango MCP ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Tango MCP'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 Tango MCP alternatives on ChatGPT?
As of 2026-11-02, Tango MCP 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.