GSA CALC+

com.1102toolsPublished by 1102tools.comOfficial publisherv1.0.24Updated Oct 30, 2026

GSA CALC+ awarded labor ceiling rates from more than 230,000 MAS contract records. 8 tools.

The publisher's own server: Acquisition.gov

VerifiedStreamable HTTPWeb executableData & AnalyticsBusiness & Commerce

Overview

AI-generated overview

Queries GSA CALC+ awarded MAS labor ceiling rates (230,000+ contract records) so an assistant can build IGCE benchmarks, check price reasonableness and pull…

What you can do
  • Search ceiling rates by keyword across labor categories, vendors and contract numbers, or by exact field value after discovering it with autocomplete.
  • Browse and filter rates without a keyword to profile a market segment.
  • Get statistical benchmarks for a labor category: count, min, max, average, median, standard deviation, P10-P90 percentiles, education and worksite breakdowns.
  • Evaluate a proposed hourly rate against the GSA ceiling rate distribution.
  • Pull a vendor's rate card page by page, and get rate distribution and top labor titles for a GSA MAS Special Item Number.
When to use it
Useful for federal contracting work: building IGCE cost estimates, judging whether a quoted hourly rate is reasonable, researching market rates for a labor category, or comparing vendors under GSA MAS schedules.
Requirements
Runs either as a hosted remote endpoint or locally via the PyPI package gsa-calc-mcp (uvx or pip, so a Python/uv runtime is needed). No API key, account or environment variables are required; the underlying GSA CALC+ API is public. Network access to the GSA service is needed.
Before you install
Data are contractor self-reported ceiling rates, fully burdened and worldwide, not prices actually paid, so results should be presented with sample size and that caveat. Keyword searches pool labor titles, vendors and contract numbers, so a vendor match can mix unrelated titles; price checks may return MIXED_SEARCH_FIELDS or UNVERIFIED_POPULATION instead of a verdict. The server self-limits to about 500 requests per rolling hour. Read-only lookups; no data is written.

Installation

In SourceWeft

  1. Open GSA CALC+ in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.1102tools%2Fgsa-calc-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "gsa-calc": {
      "type": "http",
      "url": "https://gsa-calc.1102tools.com/mcp"
    }
  }
}

README

gsa-calc-mcp

[price: free] [license: MIT] [tools: 8] [regression tests]

Free, open-source MCP server for the GSA CALC+ Labor Ceiling Rates API. Query awarded GSA MAS schedule hourly rates for IGCE development, price reasonableness analysis, and market research.

Overview, demo video and hosted setup: https://1102tools.com/mcp/gsa-calc

No API key required, locally or hosted. See Local or hosted.

Regression tests, including live checks against the GSA CALC+ API. The October 2026 releases were also checked with realistic pricing questions (IGCE benchmarks, price checks, vendor rate cards, exact-title lookups). See testing.md.

Local or hosted

Local (desktop)Claude (hosted)ChatGPT (hosted)
Local setupInstallInstall
  • Local runs it on your computer, inside the Claude or ChatGPT desktop app or another AI app. You get your own full rate limits, and it relies only on the government service. It doesn't update itself, so ask your AI to update it. You don't have to set it up by hand: give your AI this page's link and ask it to set it up or walk you through it.
  • Hosted is always up to date, needs no setup or keys, and works in Claude or ChatGPT anywhere.

Compare local and hosted · Matching prompts

What it does

Exposes the GSA CALC+ API as 8 MCP tools:

Core search

  • keyword_search - Wildcard search across labor categories, vendors, and contract numbers
  • exact_search - Exact field match (use suggest_contains to discover values first)
  • suggest_contains - Autocomplete/discovery for field values (2-char minimum)
  • filtered_browse - Browse with filters only (no keyword)

Workflow tools

  • igce_benchmark - Rate statistics for IGCE development (min/max/avg/median/percentiles)
  • price_reasonableness_check - Evaluate a proposed rate against market distribution
  • vendor_rate_card - All rates for a vendor (auto-discovers exact name)
  • sin_analysis - Rate distribution for a GSA SIN

No authentication required

The GSA CALC+ API is public. GSA does not publish a numeric limit for this endpoint. The MCP paces itself: at most 500 requests per rolling hour, 0.6 seconds between starts and two in flight.

Installation

bash
uvx --refresh-package gsa-calc-mcp --from gsa-calc-mcp gsa-calc-mcp

Or from source:

bash
git clone https://github.com/1102tools-dev/federal-contracting-mcps.gitcd federal-contracting-mcps/servers/gsa-calc-mcppip install -e .

Configuration

Use the configuration below as the server definition and adapt its placement to your compatible MCP client. For practical requests using this source, see the prompt library.

json
{  "mcpServers": {    "gsa-calc": {      "command": "uvx",      "args": ["--refresh-package", "gsa-calc-mcp", "--from", "gsa-calc-mcp", "gsa-calc-mcp"]    }  }}

The --refresh-package flag tells uv to check PyPI for a newer release each time your client launches the server, so fixes arrive automatically; without it, uv keeps serving whatever version it first cached. It adds a moment of network time at startup, so raise your platform's MCP startup timeout if it enforces a short one.

Restart the client and the tools appear.

Example prompts

  • "What are the GSA ceiling rates for Senior Software Developer with a BA and 10+ years experience?"
  • "Is $195/hr reasonable for a Cybersecurity Analyst? Check against CALC+ rates."
  • "Pull the full rate card for Booz Allen Hamilton from GSA CALC+."
  • "What does the IT Professional Services SIN (54151S) rate distribution look like?"
  • "Build IGCE benchmarks for these 5 labor categories: Program Manager, Systems Engineer, Software Developer, Help Desk Specialist, Network Administrator."
  • "Find all small business ceiling rates for project management between $100-$200/hr."

Important: ceiling rates, not prices paid

CALC+ data represents the maximum hourly rate a contractor can charge under their GSA MAS contract. Actual task order rates should be lower per FAR 8.405-2(d). These rates are:

  • Fully burdened (includes fringe, overhead, G&A, profit)
  • Worldwide (no geographic adjustment)
  • Master contract-level (not task order-specific)
  • From vendor Price Proposal Tables (self-reported by contractors)

Always note sample size and remind users these are ceiling rates when presenting analysis.

Keyword searches pool titles, vendors and contracts

IGCE and price checks use GSA's keyword search across labor titles, vendor names and contract numbers. Check population_scope: a vendor-name match can pool unrelated labor categories. Price checks return MIXED_SEARCH_FIELDS without a verdict when off-title matches are found, and UNVERIFIED_POPULATION when the title list cannot establish the full population. For title-only rates, discover an exact title with suggest_contains, then call exact_search on labor_category. Suggestion totals marked total_matching_records_is_lower_bound mean at least that many records.

License

MIT

Source: servers/gsa-calc-mcp/readme.md at commit b30d160

Tools

8

suggest_contains

Suggest Contains

Discover exact field values via autocomplete/contains matching. Returns aggregation buckets showing matching values and their record counts. Use this BEFORE exact_search() to find the right value string. Minimum 2 characters required for the search term. GSA lists at most 100 values, most records first. When more values match, truncated is true and other_records counts the records under values not shown; use a longer term to narrow the list. Example workflow: 1. suggest_contains('vendor_name', 'booz') -> finds 'Booz Allen Hamilton Inc.' 2. exact_search('vendor_name', 'Booz Allen Hamilton Inc.') -> all their rates

Parameterstermrequiredfieldrequired

filtered_browse

Filtered Browse

Browse rates with filters only (no search keyword). Useful for market segment statistics: "what do all BA-level rates with 5-15 years experience look like across all of GSA MAS?" Returns rate records plus full aggregation statistics.

Parameterssinpagesortorderingworksitepage_sizeprice_maxprice_minbusiness_sizeexperience_maxexperience_mineducation_level+1 more

igce_benchmark

IGCE Benchmark

Get ceiling rate benchmarks for IGCE development. Returns statistical summary for a labor category: count, min, max, avg, median, standard deviation, percentile distribution (P10-P90), education breakdown, worksite counts (worksite_breakdown: Customer_Facility / Contractor_Facility / Virtual; counts only, prices are pooled across sites), and outlier bounds. GSA's keyword search matches labor_category, vendor_name and idv_piid. The returned statistics pool all matching rate rows, including unrelated labor titles when a vendor name or contract number matches the phrase. Check population_scope and matched_titles before using the statistics. off_title_matches_detected flags observed titles that do not match the requested phrase; title_only_population_verified is false when the title aggregation is missing, empty, truncated or approximate. A title containing the phrase is not necessarily the exact grade: 'Registered Nurse I' also matches Nurse II, III and IV. Check exact_title_population_verified, exact_title_rate_count and non_exact_title_examples before treating a pool as that specific title. For title-only rates, call suggest_contains on labor_category to discover an exact title, then exact_search on labor_category. Different spellings remain separate searches ('Cyber Security Analyst' vs 'Cybersecurity Analyst'). Statistics are on current-year ceiling rates (current_price), not next-year or option-year prices. These are not-to-exceed ceiling rates, not prices paid. Ceiling-rate comparisons alone do not establish a proposed price's reasonableness. Optional filters: education_level, experience_min/max, business_size ('S' or 'O'), sin (e.g. '541611'), security_clearance ('yes' or 'no').

Parameterssinbusiness_sizeexperience_maxexperience_minlabor_categoryrequirededucation_levelsecurity_clearance

price_reasonableness_check

Price Reasonableness Check

Evaluate a proposed hourly rate against GSA ceiling rate distribution. GSA's keyword search matches labor titles, vendor names and contract numbers. Check population_scope: unrelated titles can enter the pooled statistics through a matching vendor or contract. Returns MIXED_SEARCH_FIELDS with no verdict when off-title matches are detected, or UNVERIFIED_POPULATION with no verdict when the title list is missing, empty, truncated or approximate. Discover an exact title with suggest_contains, then use exact_search on labor_category for title-only rates. Filters match igce_benchmark, including sin and security_clearance. Returns MIXED_LABOR_TITLES with no verdict when the phrase matches different grades, specialties or title variants; pooled statistics remain visible, with the exact-title count when verified. For example, Nurse I must not be compared as if Nurse II/III/IV rates were the same grade. Use exact_search with its supported education, experience and business-size filters to inspect that title. It does not accept SIN or clearance filters; check those requirements in the returned records and retain paging limits. A verified exact-title population with at least 20 rates returns z-score, median comparison, IQR position and delta from average. The z-score is null when the mean or standard deviation is unavailable or variance is zero. Missing means produce null average deltas. A verified exact-title population with fewer than 20 rates returns LOW_SAMPLE without a high/low verdict; zero rates return NO_DATA. Statistics compare not-to-exceed ceiling rates, not prices paid, and do not by themselves establish price reasonableness or performance risk.

Parameterssinbusiness_sizeproposed_raterequiredexperience_maxexperience_minlabor_categoryrequirededucation_levelsecurity_clearance

vendor_rate_card

Vendor Rate Card

Get ceiling rates for a specific vendor, one page at a time. For a complete vendor card or a role-specific subset (for example, project managers), fetch every page: while has_more is true, call this tool again with page=next_page and the same vendor_name, page_size, ordering, and sort. Stop only when has_more is false, then combine the pages and match the requested roles client-side. If you stop early, say clearly that the results are partial, report the fetched returned_range against total_rates, and explain that later pages may contain additional matching roles or rates. Do not claim a role is absent or present a complete role-specific rate range from a partial card. Auto-discovers the exact vendor name via suggest-contains, then pulls their rate records. Returns labor categories, rates, education levels, experience requirements, SINs, contract numbers, contract end dates, and worksite. A vendor often lists the same category twice at two prices, one for work at the customer's site (Customer_Facility) and one at the contractor's site (Contractor_Facility); check worksite before comparing. Pass a partial name (e.g., 'booz' for Booz Allen Hamilton). The tool finds the exact registered name automatically. Use part of the legal name, not an acronym ('Science Applications', not 'SAIC'). total_rates counts rate rows, not titles: one title can have several rows (worksite, contract, SIN). distinct_labor_categories is the number of distinct titles (case-sensitive); when a vendor has more than 500 it is null and distinct_labor_categories_min gives the floor. Large vendors span many pages: Booz Allen Hamilton carries ~1,900 rate rows (more than 500 distinct titles). The default page_size is 100 (~23KB) because a 500-row page for a vendor that size is ~114KB and overflows MCP client output limits. Rows are ordered by labor_category ascending by default, so a partial

Parameterspagesortorderingpage_sizevendor_namerequired

sin_analysis

SIN Analysis

Get rate distribution and statistics for a specific SIN. Returns rate statistics, education breakdown, business size breakdown, and labor_categories for a GSA MAS Special Item Number: the 25 titles with the most rates on the SIN, with counts (exact, case-sensitive titles). It does not return individual rate rows or per-title prices; for what a title costs on the SIN, call igce_benchmark(title, sin=...). When GSA's 500-title list is cut off, labor_categories.distinct is null and records_in_titles_not_listed counts the rates under titles not listed. Common SINs for professional services (live-verified to return records): - 54151S: IT Professional Services - 541611: Management and Financial Consulting - 541715: Engineering R&D - 541330ENG: Engineering Services - 561210FAC: Facilities Maintenance and Management - 611430: Training

Parameterssin_coderequiredpage_size

Version history

11
  1. v1.0.24LatestOct 30, 2026
  2. v1.0.23Oct 30, 2026
  3. v1.0.22Oct 29, 2026
  4. v1.0.21Oct 21, 2026
  5. v1.0.20Oct 12, 2026
  6. v1.0.19Oct 11, 2026
  7. v1.0.17Oct 10, 2026
  8. v1.0.14Oct 10, 2026
  9. v1.0.11Oct 10, 2026
  10. v1.0.10Oct 9, 2026
  11. v1.0.9Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other 1102tools integrations