> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Tango MCP server

The Tango MCP connector routes your AI agent's tool calls to Tango's own MCP server through Scalekit. Each user connects their own Tango API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 5 tools.

**Authentication:** API Key
**Categories:** Search, Analytics
**Tools:** 5: 5 read, 0 write, 0 destructive
**Users sign in with:** API key
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=TANGOMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Tango MCP connection

   In **AgentKit > Connections**, create a Tango MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   **Console steps with screenshots:**

   Register your Tango API key with Scalekit so it can authenticate and proxy federal procurement data requests on behalf of your users. Tango MCP uses API key authentication.

   1. ### Get a Tango API key

      - Go to the [Tango developer portal](https://tango.io) and sign in.
      - Click **Manage Account** in the top navigation.
      - Under **API Keys**, your **Default Key** is shown — click **Click to copy** to copy it.
      - To create additional keys, click **Manage API keys →**.

      > Image: Tango developer portal showing the API Keys section with the Default Key and rate limit information

   2. ### Create a connection in Scalekit

      - In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**.
      - Search for **Tango MCP** and click **Create**.
      - Note the **Connection name** — use this as `connection_name` in your code (e.g., `tangomcp`).

   3. ### Add a connected account

      Connected accounts link a specific user identifier in your system to a Tango API key. Add one in the dashboard to test. In production, each user adds their own through the authorization link: they enter their credentials on the page it opens.

      **In the dashboard, to test**

      - Open the connection and click the **Connected Accounts** tab → **Add account**.
      - Fill in **Your User's ID** and **API Key**, then click **Save**.

      **From your backend, if your app already has the credentials**

      For example, when users enter them on a settings page in your app:

        **Node.js**

        ```ts
        import { ConnectorStatus } from '@scalekit-sdk/node'

        const authorizationDetails = {
          details: {
            case: 'staticAuth',
            value: { details: { api_key: 'your-tango-api-key' } },
          },
        }

        let { connectedAccount } = await scalekit.actions.upsertConnectedAccount({
          connectionName: 'tangomcp',
          identifier: 'user_123',
          authorizationDetails,
        })

        // Make sure the account is ACTIVE before the first tool call.
        if (connectedAccount?.status !== ConnectorStatus.ACTIVE) {
          ;({ connectedAccount } = await scalekit.actions.upsertConnectedAccount({
            connectionName: 'tangomcp',
            identifier: 'user_123',
            authorizationDetails,
          }))
        }
        ```

        **Python**

        ```python
        authorization_details = {"static_auth": {"api_key": "your-tango-api-key"}}

        response = scalekit_client.actions.upsert_connected_account(
            connection_name="tangomcp",
            identifier="user_123",
            authorization_details=authorization_details,
        )

        # Make sure the account is ACTIVE before the first tool call.
        if response.connected_account.status != "ACTIVE":
            response = scalekit_client.actions.upsert_connected_account(
                connection_name="tangomcp",
                identifier="user_123",
                authorization_details=authorization_details,
            )
        ```

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'tangomcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Tango MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'tangomcp_search',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "tangomcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Tango MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="tangomcp_search",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Tango MCP server credentials there. If your app already has a user's credentials, add the account from your backend instead, as the console steps above show. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'tangomcp_fetch_api_docs',
  toolInput: {
    section: '<section>',
  },
  connector: 'tangomcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="tangomcp_fetch_api_docs",
    tool_input={
        "section": "<section>",
    },
    connection_name="tangomcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `tangomcp_fetch_api_docs`

Fetch API documentation · Read-only

Fetch detailed Tango API documentation for a specific section. Use when you need the full list of filtering parameters, valid enum values, ordering options, response shaping syntax, or advanced query patterns beyond what the tool descriptions provide.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `section` (`string`, required): Documentation section to retrieve. Valid values: 'budget_accounts', 'contracts', 'entities', 'forecasts', 'gsa-elibrary', 'idvs', 'itdashboard', 'lcats', 'metrics', 'opportunities', 'otas', 'otidvs', 'protests', 'resolve', 'response-shaping', 'subawards', 'vehicles'.

Example input: `{"section":"<section>"}`

### `tangomcp_get_details`

Get entity details · Read-only

Get detailed information about a single item — entity, contract, IDV, vehicle, opportunity, OTA, OTIDV, organization, protest, SIN, GSA eLibrary contract, IT investment, NAICS/PSC code, budget account, DIBBS RFQ/RFP/award, SAM exclusion, or SBIR topic/solicitation. Use after search or resolve to drill into a specific record, optionally enriched with related data.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): The identifier for the item — UEI, contract key, IDV key, vehicle UUID, opportunity ID, OTA key, OTIDV key, organization FH key, SIN code, GSA eLibrary contract UUID, IT investment UII, NAICS code, PSC code, or budget account id.
- `type` (`string`, required): The item type to retrieve details for. Note: 'subaward' is not supported here — use the search tool with type='subaward' and award_key filter instead. One of: `entity`, `contract`, `idv`, `vehicle`, `opportunity`, `ota`, `otidv`, `organization`, `protest`, `subaward`, `sin`, `gsa_elibrary_contract`, `itdashboard`, `naics`, `psc`, `budget_account`, `dibbs_rfq`, `dibbs_rfp`, `dibbs_award`, `exclusion`, `sbir_topic`, `sbir_solicitation`.
- `attachment_ids` (`string`, optional): 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 (Pro-tier).
- `attachment_offset` (`integer`, optional): 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. Ignored without attachment_ids. Default: `0`.
- `fields` (`string`, optional): Response shape for the primary item — comma-separated field names with optional nesting syntax (same as the search tool). Omit for comprehensive defaults.
- `include_attachment_text` (`boolean`, optional): Opportunity only. When true, pulls the full extracted text of ALL file attachments inline (Pro-tier), capped by a per-call character budget. Default: `false`.
- `include_related` (`boolean`, optional): When true, enriches the response with related data from multiple endpoints (e.g. child awards for IDVs, socioeconomic status for entities, related opportunities for protests). Default: `false`.
- `months` (`integer`, optional): Trailing window in months for spending-trend metrics (applies to entity, naics, and psc types). Default 24. Default: `24`.
- `period` (`string`, optional): Metric bucketing period for time-series data — 'year', 'quarter', or 'month'. Default 'year'. One of: `year`, `quarter`, `month`. Default: `year`.

Example input: `{"id":"<id>","type":"entity"}`

### `tangomcp_resolve`

Resolve entities · Read-only

Find entities, vehicles, NAICS/PSC codes, GSA MAS SINs, contracts, opportunities, IDVs, OTAs, 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.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Free text search — company name, organization name, vehicle name, NAICS code or keyword, PSC code, SIN code, etc.
- `limit` (`integer`, optional): Maximum number of results to return per entity type. Defaults to 5. Default: `5`.
- `type` (`string`, optional): Optional filter to restrict search to a specific entity type. When omitted, searches all types except itdashboard.

Example input: `{"query":"<query>"}`

### `tangomcp_search`

Search · Read-only

Search contracts, IDVs, vehicles, GSA eLibrary Schedule holders, CALC labor rates, OTAs, OTIDVs, subawards, organizations, GAO bid protests, federal grants, federal budget accounts, DIBBS awards, SAM exclusions (debarments), and SAM entity registrations (vendors). This is the primary data retrieval tool — use it to find records by vendor, organization, NAICS/PSC code, date range, or type-specific filters. Set include_summary=true to get aggregate statistics computed across a hard-capped sample of matching records. For appropriations data use type='budget_account'; for labor rate benchmarking use type='lcat'; for GSA Schedule holder lookups use type='gsa_elibrary'; for vendor debarment checks use type='exclusion'; for DLA parts spending use type='dibbs_award'; for vendor population/attribute queries use type='entity'.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_title` (`string`, optional): Account title contains filter for budget account searches.
- `activate_date_after` (`string`, optional): Activation date lower bound, YYYY-MM-DD (exclusion type only).
- `activate_date_before` (`string`, optional): Activation date upper bound, YYYY-MM-DD (exclusion type only).
- `active` (`string`, optional): When true, restrict to exclusions in force today, derived at query time from the activate/termination dates (exclusion type only). A lapsed exclusion is not a change to the record.
- `agency_code` (`string`, optional): Integer CGAC agency code for itdashboard filter (itdashboard type only; Pro+ tier). Use keyword for free-tier text search.
- `agency_name` (`string`, optional): Text match on itdashboard agency name (itdashboard type only; Business+ tier).
- `award_date_end` (`string`, optional): Award date range end (YYYY-MM-DD).
- `award_date_start` (`string`, optional): Award date range start (YYYY-MM-DD).
- `award_key` (`string`, optional): Filter subawards by parent contract key (subaward type only).
- `award_number` (`string`, optional): DIBBS award number, exact (dibbs_award type only). Use '|' for OR.
- `award_type` (`string`, optional): Award type code to filter by (e.g. 'A' for BPA Call, 'B' for Purchase Order, 'C' for Delivery Order, 'D' for Definitive Contract).
- `awardee_cage` (`string`, optional): Awardee CAGE code (dibbs_award type only).
- `awarding_org` (`string`, optional): Filter by awarding organization — accepts a CGAC code (e.g. '7530' for CMS, '9700' for DOD), name, or abbreviation. Department codes roll up all agencies within that department.
- `bea_category` (`string`, optional): BEA (Bureau of Economic Analysis) category filter for budget account searches (e.g. 'Discretionary', 'Mandatory').
- `bureau_name` (`string`, optional): Bureau name filter for budget account searches.
- `business_size` (`string`, optional): Filter by business size code (lcat type only).
- `cage_code` (`string`, optional): CAGE code filter (exclusion type only).
- `cfda_number` (`string`, optional): Assistance Listing (CFDA) number filter for grant searches.
- `cgac` (`string`, optional): Filter organizations by CGAC (Common Government-wide Accounting Classification) code (organization type only).
- `cio_rating` (`string`, optional): Exact CIO risk rating filter: 1=high risk, 5=low risk (itdashboard type only; Business+ tier).
- `cio_rating_max` (`string`, optional): Maximum CIO rating threshold — returns investments at or below this rating (itdashboard type only; Business+ tier).
- `classification_type` (`string`, optional): Exclusion classification type (exclusion type only).
- `contract_number` (`string`, optional): Filter by GSA contract number (gsa_elibrary type only).
- `decision_date_end` (`string`, optional): Protest decision date range end, YYYY-MM-DD (protest type only).
- `decision_date_start` (`string`, optional): Protest decision date range start, YYYY-MM-DD (protest type only).
- `delisted` (`string`, optional): Filter by delisted status (exclusion type only).
- `delivery_order_number` (`string`, optional): DIBBS delivery order number (dibbs_award type only).
- `docket_number` (`string`, optional): Filter protests by GAO docket number (protest type only).
- `education_level` (`string`, optional): Filter labor rates by education level requirement (lcat type only).
- `entity_state` (`string`, optional): US state filter for entity registrations (entity type only).
- `entity_uei` (`string`, optional): Entity UEI for labor rate lookup (lcat type only). Either idv_key or entity_uei is required for lcat searches.
- `excluding_agency_code` (`string`, optional): Excluding agency code (exclusion type only).
- `excluding_agency_name` (`string`, optional): Excluding agency name (exclusion type only).
- `exclusion_program` (`string`, optional): Exclusion program filter (exclusion type only).
- `exclusion_type` (`string`, optional): Exclusion type filter (exclusion type only).
- `expiring_end` (`string`, optional): Expiration date range end (YYYY-MM-DD). Filter contracts or IDVs expiring on or before this date.
- `expiring_start` (`string`, optional): Expiration date range start (YYYY-MM-DD). Filter contracts or IDVs expiring on or after this date.
- `federal_account_symbol` (`string`, optional): Exact federal account symbol (budget_account type). Format: CGAC-MAIN-SUB.
- `fields` (`string`, optional): Response shape — comma-separated field names with optional nesting to control which fields are returned per record. Example: 'key,piid,recipient(display_name),obligated'.
- `filed_date_end` (`string`, optional): Protest filing date range end, YYYY-MM-DD (protest type only).
- `filed_date_start` (`string`, optional): Protest filing date range start, YYYY-MM-DD (protest type only).
- `fiscal_year` (`string`, optional): Exact fiscal year match (e.g. 2024).
- `fiscal_year_end` (`string`, optional): Fiscal year range end (inclusive).
- `fiscal_year_start` (`string`, optional): Fiscal year range start (inclusive).
- `funding_instruments` (`string`, optional): Funding instrument filter for grant searches (e.g. 'Grant', 'Cooperative Agreement').
- `funding_org` (`string`, optional): Filter by funding organization (code, name, or abbreviation). More reliable than awarding_org for finding contracts that serve a particular mission organization.
- `grant_id` (`string`, optional): Exact grant identifier for grant searches.
- `idv_count_max` (`string`, optional): Maximum number of award IDVs under the vehicle (vehicle type only).
- `idv_count_min` (`string`, optional): Minimum number of award IDVs under the vehicle (vehicle type only).
- `idv_key` (`string`, optional): IDV contract key for labor rate lookup (lcat type only). Either idv_key or entity_uei is required for lcat searches.
- `idv_type` (`string`, optional): IDV type filter (idv type only). Examples: 'IDC' (Indefinite Delivery Contract), 'BPA' (Blanket Purchase Agreement), 'BOA' (Basic Ordering Agreement), 'FSS' (Federal Supply Schedule), 'GWAC' (Government-Wide Acquisition Contract).
- `include_inactive` (`string`, optional): Include inactive organizations in results (organization type only). Defaults to false.
- `include_summary` (`boolean`, optional): When true, computes aggregate stats across up to 500 matching records: total obligated, vendor count, set-aside distribution, NAICS distribution, and organization distribution. Default: `false`.
- `investment_type` (`string`, optional): Filter itdashboard records by investment type string, e.g. 'Major Investments' (itdashboard type only; Pro+ tier).
- `keyword` (`string`, optional): Full-text search across descriptions and other text fields.
- `labor_category` (`string`, optional): Filter labor rates by category name (lcat type only).
- `last_date_to_order_end` (`string`, optional): Last date to order range end (YYYY-MM-DD). Applies to IDV and vehicle searches.
- `last_date_to_order_start` (`string`, optional): Last date to order range start (YYYY-MM-DD). Applies to IDV and vehicle searches.
- `level` (`string`, optional): Filter organizations by hierarchy level (organization type only). 1=department, 2=agency, 3=bureau, etc.
- `limit` (`integer`, optional): Maximum number of results to return. Defaults to 25. Default: `25`.
- `min_years_experience_gte` (`string`, optional): Minimum experience floor — filter labor rates requiring at least this many years of experience (lcat type only).
- `min_years_experience_lte` (`string`, optional): Maximum experience ceiling — filter labor rates requiring at most this many years of experience (lcat type only).
- `naics_code` (`string`, optional): Filter by NAICS (North American Industry Classification System) code.
- `npi` (`string`, optional): National Provider Identifier filter (exclusion type only).
- `nsn` (`string`, optional): National Stock Number, exact (dibbs_award type only). Use '|' for OR.
- `obligated_gte` (`string`, optional): Obligated amount in USD — greater than or equal to. Filter for contracts with at least this obligation.
- `obligated_lte` (`string`, optional): Obligated amount in USD — less than or equal to. Filter for contracts with at most this obligation.
- `on_off_budget` (`string`, optional): On/off-budget flag filter for budget account searches.
- `opportunity_number` (`string`, optional): Grant opportunity number filter.
- `order` (`string`, optional): Sort direction — 'asc' or 'desc'. Defaults to 'desc' (most recent/largest first).
- `order_count_max` (`string`, optional): Maximum number of task orders under the vehicle (vehicle type only).
- `order_count_min` (`string`, optional): Minimum number of task orders under the vehicle (vehicle type only).
- `org_type` (`string`, optional): Filter organizations by type string (organization type only).
- `organization` (`string`, optional): Federal-hierarchy key of the buying organization (dibbs_award type only). Always DLA.
- `outcome` (`string`, optional): Filter protests by outcome (protest type only). Valid values: 'Denied', 'Dismissed', 'Withdrawn', 'Sustained'.
- `parent` (`string`, optional): Filter organizations by parent organization key (organization type only).
- `part_number` (`string`, optional): Manufacturer part number, exact (dibbs_award type only).
- `performance_risk` (`string`, optional): When true, return only itdashboard investments with at-risk performance metrics (itdashboard type only; Business+ tier).
- `piid` (`string`, optional): Procurement Instrument Identifier — the contract number.
- `pop_end_date_end` (`string`, optional): Period of performance end date range — upper bound (YYYY-MM-DD).
- `pop_end_date_start` (`string`, optional): Period of performance end date range — lower bound (YYYY-MM-DD).
- `pop_start_date_end` (`string`, optional): Period of performance start date range — upper bound (YYYY-MM-DD).
- `pop_start_date_start` (`string`, optional): Period of performance start date range — lower bound (YYYY-MM-DD).
- `posted_date_after` (`string`, optional): Posted date lower bound, YYYY-MM-DD (dibbs_award type only).
- `posted_date_before` (`string`, optional): Posted date upper bound, YYYY-MM-DD (dibbs_award type only).
- `posted_date_end` (`string`, optional): Posted date upper bound (YYYY-MM-DD; grant type).
- `posted_date_start` (`string`, optional): Posted date lower bound (YYYY-MM-DD; grant type).
- `price_gte` (`string`, optional): Minimum hourly rate in USD (lcat type only).
- `price_lte` (`string`, optional): Maximum hourly rate in USD (lcat type only).
- `prime_uei` (`string`, optional): Filter subawards by prime contractor UEI (subaward type only).
- `program_acronym` (`string`, optional): Filter by vehicle program acronym, e.g. 'OASIS+', 'SEWP', 'STARS' (vehicle type only).
- `protester_name` (`string`, optional): Filter protests by protester company name (protest type only).
- `psc_code` (`string`, optional): Filter by PSC (Product Service Code).
- `purchase_request` (`string`, optional): Purchase request number (dibbs_award type only).
- `recipient_name` (`string`, optional): Filter by vendor name. Requires near-exact match including suffixes like ', INC.'. If 0 results, the tool automatically retries using the name as a keyword.
- `recipient_uei` (`string`, optional): Filter by vendor UEI (Unique Entity Identifier). Preferred over recipient_name for precise filtering; use the resolve tool to find the correct UEI.
- `schedule` (`string`, optional): Filter by GSA Schedule name, e.g. 'MAS' (gsa_elibrary type only).
- `security_clearance` (`string`, optional): Filter by security clearance requirement (lcat type only).
- `set_aside_type` (`string`, optional): Filter by set-aside type code (e.g. 'SBA' for small business, '8AN' for 8(a)). See tango://reference/set-asides for valid codes.
- `sin` (`string`, optional): Filter by SIN (Special Item Number) code (gsa_elibrary and lcat types). Not valid for contract-type searches — use type='gsa_elibrary' with sin= to find MAS Schedule holders.
- `socioeconomic` (`string`, optional): SAM business-type code(s), pipe-OR supported, e.g. 'OY|A2' (entity type only). NOT set-aside codes. Call fetch_api_docs("entities") for the full table.
- `solicitation_identifier` (`string`, optional): Solicitation identifier to filter by. Also usable for protest searches to filter by the associated solicitation.
- `sort` (`string`, optional): Field to sort results by. For contracts: 'award_date', 'obligated'. For grants: 'posted_date'. For budget accounts: 'obligated_total' or 'enacted_ba'.
- `status` (`string`, optional): Status filter for grant searches (e.g. 'posted', 'forecasted', 'closed').
- `sub_uei` (`string`, optional): Filter subawards by subcontractor UEI (subaward type only).
- `termination_date_after` (`string`, optional): Termination date lower bound, YYYY-MM-DD (exclusion type only).
- `termination_date_before` (`string`, optional): Termination date upper bound, YYYY-MM-DD (exclusion type only).
- `total_contract_price_max` (`string`, optional): Maximum order total in USD (dibbs_award type only).
- `total_contract_price_min` (`string`, optional): Minimum order total in USD (dibbs_award type only). The whole ORDER's total, repeated on every line item.
- `total_obligated_max` (`string`, optional): Maximum total dollars obligated under the vehicle (vehicle type only).
- `total_obligated_min` (`string`, optional): Minimum total dollars obligated under the vehicle (vehicle type only).
- `type` (`string`, optional): What record type to search. Options: contract (default), idv, vehicle, all (contracts+IDVs), ota, otidv, subaward, organization, protest, gsa_elibrary, lcat, itdashboard, grant, budget_account. Default: `contract`.
- `update_date_after` (`string`, optional): Last-updated date lower bound, YYYY-MM-DD (exclusion type only).
- `update_date_before` (`string`, optional): Last-updated date upper bound, YYYY-MM-DD (exclusion type only).
- `updated_after` (`string`, optional): Only include itdashboard records updated on or after this date, YYYY-MM-DD (itdashboard type only; Pro+ tier).
- `updated_before` (`string`, optional): Only include itdashboard records updated on or before this date, YYYY-MM-DD (itdashboard type only; Pro+ tier).
- `vehicle_type` (`string`, optional): Filter by vehicle type, e.g. 'GWAC', 'BPA', 'MAS', 'MAC' (vehicle type only).
- `who_can_use` (`string`, optional): Filter by eligible user pool, e.g. 'Government-wide', 'Agency-specific' (vehicle type only).
- `worksite` (`string`, optional): Filter by work location type (lcat type only).

Example input: `{}`

### `tangomcp_search_opportunities`

Search Opportunities · Read-only

Search open federal pre-award procurement records — SAM.gov opportunities, procurement forecasts, DLA DIBBS RFQs/RFPs, and SBIR/STTR topics and solicitations. Filter by organization, NAICS/PSC code, set-aside type, notice type, place of performance, response deadline, and family-specific filters (nsn/part_number for DIBBS, topic_number/program for SBIR). Returns a list of matching records with total count.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`string`, optional): Filter active or inactive opportunities.
- `activity` (`string`, optional): SBIR lifecycle, derived at query time — 'open', 'closed', or (topics only) 'unknown' for topics with no usable date roster (SBIR only). Prefer this over active for SBIR.
- `award_date_after` (`string`, optional): Anticipated award date lower bound (YYYY-MM-DD, forecasts only).
- `award_date_before` (`string`, optional): Anticipated award date upper bound (YYYY-MM-DD, forecasts only).
- `buyer_code` (`string`, optional): DLA buyer code (dibbs_rfp only).
- `cycle_name` (`string`, optional): Solicitation cycle name (sbir_solicitation only).
- `doc_source` (`string`, optional): Source document collection (sbir_topic only).
- `fields` (`string`, optional): 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. Use "office(*)" to get agency, department, and office details. Omit for sensible defaults.
- `first_notice_date_after` (`string`, optional): First notice date lower bound (YYYY-MM-DD).
- `first_notice_date_before` (`string`, optional): First notice date upper bound (YYYY-MM-DD).
- `fiscal_year` (`string`, optional): Exact fiscal year match (forecasts only).
- `fiscal_year_end` (`string`, optional): Fiscal year range end (forecasts only).
- `fiscal_year_start` (`string`, optional): Fiscal year range start (forecasts only).
- `keyword` (`string`, optional): Search text across titles and descriptions of opportunities.
- `last_notice_date_after` (`string`, optional): Last notice date lower bound (YYYY-MM-DD).
- `last_notice_date_before` (`string`, optional): Last notice date upper bound (YYYY-MM-DD).
- `limit` (`integer`, optional): Max results to return (default 25). Default: `25`.
- `modified_after` (`string`, optional): Modified date lower bound (YYYY-MM-DD, forecasts only).
- `modified_before` (`string`, optional): Modified date upper bound (YYYY-MM-DD, forecasts only).
- `naics_codes` (`string`, optional): List of NAICS codes to filter by.
- `naics_starts_with` (`string`, optional): NAICS code prefix filter (forecasts only).
- `notice_type` (`string`, optional): Filter by notice type. Accepts a single-letter code or human-readable name. 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).
- `nsn` (`string`, optional): National Stock Number, exact (dibbs_rfq/dibbs_rfp only). Use '|' for OR.
- `ordering` (`string`, optional): Ordering field (for example: last_notice_date or -response_deadline).
- `org` (`string`, optional): Organization filter — accepts a code, name, or abbreviation (e.g. "VA", "CMS", "7500").
- `organization` (`string`, optional): Federal-hierarchy key of the DLA buying organization (DIBBS only). Not the same as org — DIBBS is always DLA, so this narrows within DLA.
- `out_of_cycle` (`string`, optional): Whether the solicitation is out of cycle (sbir_solicitation only).
- `part_number` (`string`, optional): Manufacturer part number, exact (dibbs_rfq/dibbs_rfp only).
- `place_of_performance` (`string`, optional): Place of performance text filter.
- `program` (`string`, optional): 'SBIR' or 'STTR' (sbir_solicitation only). Topics have no program filter; filter topics via solicitation_number instead.
- `psc_codes` (`string`, optional): List of PSC codes to filter by.
- `purchase_request` (`string`, optional): Purchase request number (dibbs_rfq only).
- `quantity_max` (`string`, optional): Maximum quantity requested (dibbs_rfq only).
- `quantity_min` (`string`, optional): Minimum quantity requested (dibbs_rfq only).
- `release_date_after` (`string`, optional): 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` (`string`, optional): Release-date upper bound (sbir_topic only).
- `response_deadline_after` (`string`, optional): Only include opportunities due after this date (YYYY-MM-DD).
- `response_deadline_before` (`string`, optional): Include opportunities due before this date (YYYY-MM-DD).
- `set_aside_flag` (`string`, optional): DIBBS set-aside flag — 'Y' or 'N' (dibbs_rfq only). A yes/no flag, not a set-aside program type; use set_aside_types for 8(a)/SDVOSB/etc. on opportunities.
- `set_aside_types` (`string`, optional): List of set-aside type codes to filter by (e.g. ["SBA", "8AN"]). See tango://reference/set-asides for valid codes.
- `solicitation_number` (`string`, optional): Solicitation number filter.
- `solicitation_status` (`string`, optional): sbir.gov's own raw Open/Closed string (SBIR only). Source data, distinct from the derived activity field — they can disagree.
- `source_system` (`string`, optional): Source system filter (forecasts only).
- `status` (`string`, optional): Status filter (forecasts only). Examples: "Draft", "Final".
- `status_code` (`string`, optional): 11-character composite DIBBS status code, e.g. 'DLK00L1N000' (dibbs_rfq only). Unrelated to status and solicitation_status.
- `topic_number` (`string`, optional): SBIR topic number, exact (sbir_topic only).
- `type` (`string`, optional): What to search — "opportunity" (default), "forecast", "dibbs_rfq", "dibbs_rfp", "sbir_topic", or "sbir_solicitation". Default: `opportunity`.
- `year` (`string`, optional): Solicitation year, exact (SBIR only). Not a fiscal year — use fiscal_year for forecasts.

Example input: `{}`

## Related

Other Search connectors ([all 36](/agentkit/connectors/?category=search)):

- [Supadata](/agentkit/connectors/supadata/): Scalekit connector, API key, 21 tools
- [Exa](/agentkit/connectors/exa/): Scalekit connector, API key, 21 tools
- [Brave Search](/agentkit/connectors/brave/): Scalekit connector, API key, 18 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
