Koskamo

CivicDataForge MCP

A community MCP server providing public-record evidence for property, compliance, and research workflows. It supports checking short-term rental permits, enriching property data, and accessing government data services via a Streamable HTTP endpoint.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

CivicDataForge MCP logo, by CivicDataForgeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by CivicDataForge
MCP endpoint (Streamable HTTP)
https://civicdataforge.pages.dev/mcp
Vendor documentation

What its tools do

15 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

15 of 15 have a description · 15 of 15 declare behavior hints · 12 of 15 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Check short-term rental permits for specific addresses
  • Enrich property data with source-linked evidence
  • Access government data services for compliance research

Source and maintenance

Community listingRegistry 1.4.3
Maintenance checked

Protocol and capabilities

Server
civicdataforge 1.6.0
MCP protocol negotiated in check
2025-06-18
Tools
15 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Discovery is public. civicdataforge_free_permit_check checks addresses against cities' own published short-term rental permit lists with no key. Paid tools accept a CivicDataForge API key through Authorization: Bearer or X-CivicDataForge-Key; existing Apify customers may send their own token in X-Apify-Token.

Tools

15 advertised

civicdataforge_free_permit_check — Free STR permit check (no key)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Free, no key needed. Checks whether each address appears on its city's own published short-term rental permit list, for the 18 cities whose lists are searchable live (Albuquerque, Arlington TX, Asheville, Aspen, Bend, Coconino County, Denver, Houston, Huntington Beach, Louisville, Marin County, Nashville, New Orleans, Norfolk, Orlando, Sacramento, San Bernardino County, Seattle). Returns has_permit, expired, no_permit_found or close_match with the city's status, expiry date, the address as the city lists it, and a link to the city record. Other covered places return audit_only with the Permit Audit ($4.99) link. Up to 25 lines a call, 200 an hour.

civicdataforge_free_permit_check input schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "For one address: the city."
    },
    "lines": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "required": [
              "city",
              "address"
            ],
            "properties": {
              "city": {
                "type": "string",
                "description": "City or county, e.g. \"Denver\" or \"Denver, CO\"."
              },
              "address": {
                "type": "string",
                "description": "Street address starting with the house number."
              }
            }
          }
        ]
      },
      "maxItems": 25,
      "minItems": 1,
      "description": "Addresses to check. Each is {city, address} or one string like \"123 Main St, Denver\"."
    },
    "address": {
      "type": "string",
      "description": "For one address: the street address."
    }
  }
}
civicdataforge_free_permit_check annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
civicdataforge--civicdataforge-evidence-gateway — CivicDataForge Evidence Gateway
Advertised by the server during the last successful anonymous check.
Open-world

Use for routing a supported U.S. property, India company or supplier, restricted-party, EPA facility, or rights-first China-facing intake task into one minimized, receipt-bound packet. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--civicdataforge-evidence-gateway input schema
{
  "type": "object",
  "required": [
    "task",
    "subject"
  ],
  "properties": {
    "task": {
      "enum": [
        "us_property_decision",
        "india_company_evidence",
        "india_supplier_pack",
        "restricted_party_screening",
        "epa_facility_evidence",
        "earth_observation_evidence",
        "china_counterparty_intake"
      ],
      "type": "string",
      "title": "Evidence task"
    },
    "purpose": {
      "type": "string",
      "title": "Purpose"
    },
    "subject": {
      "type": "object",
      "title": "Exact subject identifiers",
      "additionalProperties": true
    },
    "evidence": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Rights-labeled customer or licensed evidence",
      "default": []
    },
    "retentionDays": {
      "type": "integer",
      "title": "Packet retention days",
      "default": 0,
      "maximum": 365,
      "minimum": 0
    },
    "batchReference": {
      "type": "string",
      "title": "Customer batch reference",
      "maxLength": 120
    },
    "transactionGate": {
      "type": "boolean",
      "title": "Include caller-policy transaction state",
      "default": false
    },
    "previousReceiptHash": {
      "type": "string",
      "title": "Previous evidence-state receipt",
      "pattern": "^sha256:[a-f0-9]{64}$"
    },
    "screenRestrictedParties": {
      "type": "boolean",
      "title": "Screen China-facing subject against the U.S. ITA CSL",
      "default": true
    }
  },
  "description": "Route a U.S., India, global screening, EPA, or China-facing evidence task through one receipt-bound contract."
}
civicdataforge--civicdataforge-evidence-gateway annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--str-permit-registry — US STR Permit Registry
Advertised by the server during the last successful anonymous check.
Open-world

Use for address, permit-ID, or jurisdiction research across the supported US short-term-rental permit sources. For Florida statewide DBPR lodging licenses, use fl-dbpr-vacation-rentals instead. Address mode preserves explicit evidence decisions, scope, and receipts. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--str-permit-registry input schema
{
  "type": "object",
  "properties": {
    "cities": {
      "type": "array",
      "items": {
        "enum": [
          "albuquerque",
          "arlington",
          "asheville",
          "aspen",
          "austin",
          "bend",
          "boston",
          "chattanooga",
          "chicago",
          "coconino",
          "denver",
          "houston",
          "huntington_beach",
          "kansas_city",
          "las_vegas",
          "louisville",
          "marin",
          "nashville",
          "new_orleans",
          "norfolk",
          "orlando",
          "osceola_county",
          "philadelphia",
          "polk_county",
          "sacramento",
          "san_bernardino",
          "san_diego",
          "san_juan",
          "scottsdale",
          "seattle",
          "columbus_ga",
          "cook_county_mn",
          "little_rock_ar",
          "cody_wy",
          "green_bay_wi",
          "key_west_fl",
          "covington_ky",
          "shreveport_la",
          "north_las_vegas_nv",
          "summit_county_co",
          "breckenridge_co",
          "placer_county_ca",
          "washington_dc",
          "honolulu",
          "honolulu_nuc",
          "big_bear_lake_ca",
          "clear_creek_co",
          "corpus_christi_tx",
          "cambridge_ma",
          "belton_tx",
          "bedford_tx",
          "baldwin_county_ga",
          "ruidoso_nm",
          "long_lake_township_mi",
          "south_haven_mi"
        ],
        "type": "string",
        "enumTitles": [
          "Albuquerque, NM",
          "Arlington, TX",
          "Asheville, NC",
          "Aspen, CO",
          "Austin, TX",
          "Bend, OR",
          "Boston, MA",
          "Chattanooga, TN",
          "Chicago, IL",
          "Coconino County, AZ",
          "Denver, CO",
          "Houston, TX",
          "Huntington Beach, CA",
          "Kansas City, MO",
          "Las Vegas, NV",
          "Louisville, KY",
          "Marin County, CA",
          "Nashville, TN",
          "New Orleans, LA",
          "Norfolk, VA",
          "Orlando, FL",
          "Osceola County, FL",
          "Philadelphia, PA",
          "Polk County, FL",
          "Sacramento, CA",
          "San Bernardino County, CA",
          "San Diego, CA",
          "San Juan County, WA",
          "Scottsdale, AZ",
          "Seattle, WA",
          "Columbus, GA",
          "Cook County, MN",
          "Little Rock, AR",
          "Cody, WY",
          "Green Bay, WI",
          "Key West, FL",
          "Covington, KY",
          "Shreveport, LA",
          "North Las Vegas, NV",
          "Summit County, CO",
          "Breckenridge, CO",
          "Placer County, CA",
          "Washington, DC",
          "Honolulu, HI",
          "Honolulu, HI (approved nonconforming use certificates)",
          "Big Bear Lake, CA",
          "Clear Creek County, CO",
          "Corpus Christi, TX",
          "Cambridge, MA",
          "Belton, TX",
          "Bedford, TX",
          "Baldwin County, GA",
          "Ruidoso, NM",
          "Long Lake Township, MI",
          "South Haven, MI"
        ]
      },
      "title": "Cities",
      "editor": "select",
      "default": [
        "orlando"
      ],
      "prefill": [
        "orlando"
      ],
      "description": "Which of the 55 city registries to pull (54 places; Honolulu publishes two). Published fields vary by city; see the README coverage table."
    },
    "status": {
      "enum": [
        "all",
        "active"
      ],
      "type": "string",
      "title": "Permit status filter",
      "editor": "select",
      "default": "all",
      "prefill": "active",
      "enumTitles": [
        "All permits",
        "Active only"
      ],
      "description": "Return all permits, or only currently-active licenses."
    },
    "snapshot": {
      "type": "boolean",
      "title": "Monitor changes from a complete pull",
      "default": false,
      "description": "Persist a query-scoped baseline and compare it with the prior complete run. Requires maxRecordsPerCity to be cleared; capped results are rejected so they cannot create false disappearance alerts."
    },
    "maxRecordsPerCity": {
      "type": "integer",
      "title": "Max records per city",
      "default": 50,
      "minimum": 1,
      "prefill": 25,
      "nullable": true,
      "description": "Cap records per city (leave empty for the full registry)."
    },
    "resolveJurisdiction": {
      "type": "boolean",
      "title": "Resolve governing jurisdiction",
      "default": true,
      "description": "Use coordinates and Census boundaries to distinguish an incorporated city from an unincorporated county area. Disable for a faster raw-source pull."
    }
  }
}
civicdataforge--str-permit-registry annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--fl-dbpr-vacation-rentals — Florida DBPR Vacation-Rental Licenses
Advertised by the server during the last successful anonymous check.
Open-world

Use for Florida statewide DBPR vacation-rental and lodging-license evidence. For municipal STR permits use str-permit-registry; for code violations use property-violations. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--fl-dbpr-vacation-rentals input schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "title": "City",
      "editor": "textfield",
      "nullable": true,
      "description": "Filter by property location city (e.g. Kissimmee, Orlando, Destin). Leave empty for all."
    },
    "county": {
      "type": "string",
      "title": "County",
      "editor": "textfield",
      "prefill": "Orange",
      "nullable": true,
      "description": "Filter to one Florida county by property location (e.g. Orange, Osceola, Dade, Monroe, St. Johns). Leave empty for statewide."
    },
    "status": {
      "enum": [
        "all",
        "current",
        "delinquent"
      ],
      "type": "string",
      "title": "License status",
      "editor": "select",
      "default": "all",
      "prefill": "current",
      "enumTitles": [
        "All licenses",
        "Current only",
        "Delinquent only"
      ],
      "description": "Current = up to date with DBPR; Delinquent = license not renewed on time (expiry date has passed)."
    },
    "maxRecords": {
      "type": "integer",
      "title": "Max records",
      "default": 100,
      "minimum": 1,
      "prefill": 25,
      "description": "Cap total records returned (statewide is ~174k)."
    },
    "licenseType": {
      "enum": [
        "all",
        "condo",
        "dwelling"
      ],
      "type": "string",
      "title": "License type",
      "editor": "select",
      "default": "all",
      "enumTitles": [
        "Both types",
        "Vacation Rental — Condo",
        "Vacation Rental — Dwelling"
      ],
      "description": "DBPR licenses vacation rentals as Condos (type 2006) or Dwellings (type 2007, incl. single-family homes & townhouses)."
    },
    "nameContains": {
      "type": "string",
      "title": "Name contains",
      "editor": "textfield",
      "nullable": true,
      "description": "Case-insensitive substring match on the business name or licensee name."
    },
    "proxyConfiguration": {
      "type": "object",
      "title": "Proxy",
      "editor": "proxy",
      "default": {
        "useApifyProxy": true
      },
      "prefill": {
        "useApifyProxy": true
      },
      "description": "The state site blocks plain datacenter traffic; Apify Proxy is used by default. Switch to residential if datacenter IPs get blocked."
    }
  }
}
civicdataforge--fl-dbpr-vacation-rentals annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--property-violations — Municipal Property Violations
Advertised by the server during the last successful anonymous check.
Open-world

Use for municipal building, property, and code-violation research in supported jurisdictions. Do not use for STR licensing or restaurant health inspections; choose the corresponding permit or inspection tool. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--property-violations input schema
{
  "type": "object",
  "properties": {
    "cities": {
      "type": "array",
      "items": {
        "enum": [
          "chicago",
          "nyc",
          "san_francisco",
          "austin"
        ],
        "type": "string",
        "enumTitles": [
          "Chicago, IL",
          "New York City, NY",
          "San Francisco, CA",
          "Austin, TX"
        ]
      },
      "title": "Cities",
      "editor": "select",
      "default": [
        "austin"
      ],
      "prefill": [
        "austin"
      ],
      "description": "Which city building code-enforcement / property-violation registries to pull."
    },
    "status": {
      "enum": [
        "all",
        "open"
      ],
      "type": "string",
      "title": "Violation status filter",
      "editor": "select",
      "default": "all",
      "prefill": "open",
      "enumTitles": [
        "All violations",
        "Open / active only"
      ],
      "description": "Return all violations, or only currently OPEN/active ones (the distress signal buyers usually want)."
    },
    "maxRecordsPerCity": {
      "type": "integer",
      "title": "Max records per city",
      "default": 100,
      "minimum": 1,
      "prefill": 25,
      "nullable": true,
      "description": "Cap records per city, newest first (leave empty to pull the full registry)."
    }
  }
}
civicdataforge--property-violations annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--leie-exclusion-screening — HHS-OIG LEIE Exclusion Screening
Advertised by the server during the last successful anonymous check.
Open-world

Use to find review candidates in the HHS-OIG LEIE by name, valid NPI, state, specialty, or exclusion type. Do not treat a candidate match as identity adjudication or use this tool for facility licensing. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without changing the source list.

civicdataforge--leie-exclusion-screening input schema
{
  "type": "object",
  "properties": {
    "mode": {
      "enum": [
        "screen",
        "filter"
      ],
      "type": "string",
      "title": "Mode",
      "editor": "select",
      "default": "screen",
      "prefill": "filter",
      "enumTitles": [
        "Screen a list",
        "Filter the LEIE list"
      ],
      "description": "screen checks people/entities and returns evidence records; filter pulls source LEIE records with provenance."
    },
    "state": {
      "type": "string",
      "title": "State (filter mode)",
      "editor": "textfield",
      "prefill": "FL",
      "nullable": true,
      "description": "Two-letter state code, for example TX."
    },
    "enrichNpi": {
      "type": "boolean",
      "title": "Resolve identity with CMS NPPES",
      "default": true,
      "description": "Look up matched LEIE NPIs or a caller-supplied NPI in the official CMS registry and return explainable correlation signals. NPI status is not licensure or eligibility."
    },
    "samApiKey": {
      "type": "string",
      "title": "SAM.gov API key",
      "editor": "textfield",
      "isSecret": true,
      "description": "Caller-supplied SAM.gov public API key. Required only when includeSam is enabled; never returned in output."
    },
    "specialty": {
      "type": "string",
      "title": "Specialty (filter mode)",
      "editor": "textfield",
      "nullable": true,
      "description": "Substring match on specialty, such as NURSING, PHARMACY, or HOME HEALTH."
    },
    "includeSam": {
      "type": "boolean",
      "title": "Also check SAM.gov active exclusions",
      "default": false,
      "description": "Opt in to the official GSA SAM.gov Exclusions API. Requires your own public SAM.gov API key."
    },
    "maxRecords": {
      "type": "integer",
      "title": "Max records (filter mode)",
      "default": 100,
      "minimum": 1,
      "prefill": 50,
      "nullable": true,
      "description": "Caps LEIE records returned in filter mode."
    },
    "screenList": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "npi": {
            "type": "string",
            "title": "NPI",
            "pattern": "^[0-9]{10}$",
            "description": "Optional 10-digit NPI. The Actor also validates the NPI check digit and rejects invalid values."
          },
          "ref": {
            "type": "string",
            "title": "Caller reference",
            "description": "Optional caller reference returned with the evidence record."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "minLength": 1,
            "description": "Person or entity name. Required when NPI is omitted."
          },
          "state": {
            "type": "string",
            "title": "State",
            "pattern": "^[A-Za-z]{2}$",
            "description": "Optional two-letter state used to constrain name candidates."
          }
        }
      },
      "title": "People / entities to screen",
      "editor": "json",
      "default": [],
      "maxItems": 500,
      "description": "For screen mode. Each item: { \"name\": \"JOHN SMITH\" or \"ACME HOME HEALTH\", \"npi\": \"1234567893\" (optional valid test NPI), \"state\": \"NC\" (optional), \"ref\": \"your-id\" (optional) }. Name-only matches are normalized exact-name candidates, constrained by state when supplied, and require human review."
    },
    "exclusionType": {
      "type": "string",
      "title": "Exclusion type (filter mode)",
      "editor": "textfield",
      "nullable": true,
      "description": "OIG exclusion authority code, such as 1128a1 or 1128b5."
    },
    "maxNpiLookups": {
      "type": "integer",
      "title": "Maximum CMS NPI lookups",
      "default": 10,
      "maximum": 25,
      "minimum": 0,
      "description": "Caps NPPES calls per run. Remaining rows still receive LEIE results and show that enrichment was skipped."
    },
    "maxSamQueries": {
      "type": "integer",
      "title": "Maximum SAM.gov queries",
      "default": 10,
      "maximum": 10,
      "minimum": 0,
      "description": "Caps SAM.gov calls per run to respect the official API's role-dependent rate limits."
    }
  }
}
civicdataforge--leie-exclusion-screening annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--restaurant-inspection-scores — Restaurant Inspection Scores
Advertised by the server during the last successful anonymous check.
Open-world

Use for official restaurant inspection scores, violations, and facility-history research in supported jurisdictions. Do not use for general property-code violations or childcare inspections. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--restaurant-inspection-scores input schema
{
  "type": "object",
  "properties": {
    "since": {
      "type": "string",
      "title": "Inspections since",
      "editor": "textfield",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "nullable": true,
      "description": "Inclusive ISO date YYYY-MM-DD."
    },
    "until": {
      "type": "string",
      "title": "Inspections through",
      "editor": "textfield",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "nullable": true,
      "description": "Inclusive ISO date YYYY-MM-DD."
    },
    "cities": {
      "type": "array",
      "items": {
        "enum": [
          "nyc",
          "chicago",
          "austin",
          "cincinnati",
          "boulder",
          "montgomery",
          "king_county"
        ],
        "type": "string",
        "enumTitles": [
          "New York City, NY",
          "Chicago, IL",
          "Austin, TX",
          "Cincinnati, OH",
          "Boulder County, CO",
          "Montgomery County, MD",
          "King County, WA"
        ]
      },
      "title": "Jurisdictions",
      "editor": "select",
      "default": [
        "chicago"
      ],
      "prefill": [
        "chicago"
      ],
      "description": "Official inspection feeds to query. Every output and run receipt discloses source age, row grain, and source status."
    },
    "resultContains": {
      "type": "string",
      "title": "Result or grade contains",
      "editor": "textfield",
      "nullable": true,
      "description": "Case-insensitive substring on the jurisdiction's published result or grade. A source with no such field returns no matches; scores are never guessed into grades."
    },
    "socrataAppToken": {
      "type": "string",
      "title": "Socrata application token",
      "editor": "textfield",
      "isSecret": true,
      "nullable": true,
      "description": "Optional caller-owned app token for a dedicated Socrata rate-limit pool. It is sent only as X-App-Token and never returned."
    },
    "maxRecordsPerCity": {
      "type": "integer",
      "title": "Maximum records per jurisdiction",
      "default": 100,
      "maximum": 5000,
      "minimum": 1,
      "prefill": 25,
      "description": "Bounded newest-first query limit per jurisdiction (1-5,000)."
    },
    "businessNameContains": {
      "type": "string",
      "title": "Business name contains",
      "editor": "textfield",
      "nullable": true,
      "description": "Case-insensitive establishment-name substring. Applied server-side where supported and verified client-side for every source."
    }
  }
}
civicdataforge--restaurant-inspection-scores annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--multistate-childcare-licensing — Multi-State Childcare Licensing
Advertised by the server during the last successful anonymous check.
Open-world

Use for cross-state childcare licensing, inspection, and deficiency research across supported states. For Texas-only operation, inspection, or deficiency filters, use texas-childcare-licensing instead. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--multistate-childcare-licensing input schema
{
  "type": "object",
  "properties": {
    "county": {
      "type": "string",
      "title": "County",
      "editor": "textfield",
      "nullable": true,
      "description": "Filter to one county (e.g. 'Sussex', 'Oneida', 'Boulder'). Applied server-side where the state feed carries a county column; CT publishes no county so a county filter returns no CT rows. Leave empty for statewide."
    },
    "states": {
      "type": "array",
      "title": "States",
      "editor": "stringList",
      "default": [
        "CT"
      ],
      "prefill": [
        "CT"
      ],
      "nullable": true,
      "description": "Which states to pull. Available: NY (16.8k facilities), NJ (4.2k), CO (4.5k), CT (16.2k + inspections), DE (1.2k + inspections & deficiencies). Leave empty for all five."
    },
    "licenseStatus": {
      "type": "string",
      "title": "License status",
      "editor": "textfield",
      "nullable": true,
      "description": "Case-insensitive substring match on the facility's license status (e.g. 'ACTIVE', 'License', 'Licensed'). Leave empty for all statuses."
    },
    "minDeficiencies": {
      "type": "integer",
      "title": "Min cited deficiencies",
      "minimum": 0,
      "nullable": true,
      "description": "Only return facilities with at least this many cited deficiencies (compliance screening). Deficiency counts are published only by Delaware; other states have none, so this filter excludes them."
    },
    "maxInspectionRows": {
      "type": "integer",
      "title": "Max inspection rows per state",
      "default": 200,
      "minimum": 1,
      "prefill": 50,
      "nullable": true,
      "description": "Cap the inspection/deficiency rows fetched per state before building the per-facility compliance lookup (leave empty to read the full feed; CT ships ~97k inspection rows)."
    },
    "includeInspections": {
      "type": "boolean",
      "title": "Include inspection / deficiency data",
      "default": false,
      "prefill": false,
      "description": "When on, fetch each state's inspection/deficiency feed and merge per-facility inspection_count and (DE) deficiency_count + top cited regulations. Turn off for a faster, licensing-only pull. Only affects CT and DE."
    },
    "maxRecordsPerState": {
      "type": "integer",
      "title": "Max records per state",
      "default": 50,
      "minimum": 1,
      "prefill": 25,
      "nullable": true,
      "description": "Cap the number of facility records pulled from each state (leave empty for the full registry)."
    }
  }
}
civicdataforge--multistate-childcare-licensing annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--texas-childcare-licensing — Texas Childcare Licensing
Advertised by the server during the last successful anonymous check.
Open-world

Use for Texas-only childcare operation, inspection, and deficiency evidence. For comparable research spanning multiple supported states, use multistate-childcare-licensing instead. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--texas-childcare-licensing input schema
{
  "type": "object",
  "properties": {
    "county": {
      "type": "string",
      "title": "County",
      "editor": "textfield",
      "prefill": "Travis",
      "nullable": true,
      "description": "Filter to one Texas county (e.g. HARRIS, DALLAS, TRAVIS). Leave empty for statewide."
    },
    "maxRecords": {
      "type": "integer",
      "title": "Max records",
      "default": 100,
      "minimum": 1,
      "prefill": 25,
      "nullable": true,
      "description": "Cap total records (leave empty for the full registry, ~100k)."
    },
    "operationType": {
      "type": "string",
      "title": "Operation type",
      "editor": "textfield",
      "nullable": true,
      "description": "e.g. 'Licensed Center', 'Licensed Child-Care Home', 'Listed Family Home'. Leave empty for all."
    },
    "minHighDeficiencies": {
      "type": "integer",
      "title": "Min high-severity deficiencies",
      "minimum": 0,
      "nullable": true,
      "description": "Only return operations with at least this many high-severity deficiencies (compliance screening)."
    }
  }
}
civicdataforge--texas-childcare-licensing annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--epa-echo-facility-compliance — EPA ECHO Facility Compliance Evidence
Advertised by the server during the last successful anonymous check.
Open-world

Use for a bounded EPA ECHO facility query that preserves published identity, compliance, inspection, and enforcement evidence while keeping environmental safety UNKNOWN. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--epa-echo-facility-compliance input schema
{
  "type": "object",
  "properties": {
    "zip": {
      "type": "string",
      "title": "ZIP code",
      "pattern": "^[0-9]{5}(-[0-9]{4})?$"
    },
    "city": {
      "type": "string",
      "title": "City",
      "maxLength": 100
    },
    "state": {
      "type": "string",
      "title": "State",
      "pattern": "^[A-Za-z]{2}$"
    },
    "facilityId": {
      "type": "string",
      "title": "EPA FRS Registry ID",
      "pattern": "^[0-9]{12}$",
      "description": "Exact 12-digit Facility Registry Service ID, for example 110000367567."
    },
    "facilityName": {
      "type": "string",
      "title": "Facility name",
      "maxLength": 200,
      "minLength": 3,
      "description": "Published facility name. Add location fields to reduce ambiguity."
    },
    "maxCandidates": {
      "type": "integer",
      "title": "Maximum candidates",
      "default": 5,
      "maximum": 10,
      "minimum": 1
    },
    "nameMatchMode": {
      "enum": [
        "exact",
        "contains",
        "begins"
      ],
      "type": "string",
      "title": "Name matching",
      "default": "exact",
      "description": "Exact is the responsible default. Contains is discovery-only and may require review."
    },
    "streetAddress": {
      "type": "string",
      "title": "Street address",
      "maxLength": 200,
      "minLength": 5,
      "description": "Full or partial published street address. Address-only searches also require city, state, or ZIP."
    },
    "includeProgramDetails": {
      "type": "boolean",
      "title": "Retrieve program details",
      "default": true
    }
  },
  "description": "Provide a 12-digit EPA FRS Registry ID, or a bounded facility name/address query. Exact FRS ID is the strongest selector."
}
civicdataforge--epa-echo-facility-compliance annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
civicdataforge--norway-company-evidence — Norway Company & Supplier Evidence
Advertised by the server during the last successful anonymous check.
Open-world

Use for exact nine-digit Norwegian organisation-number evidence or bounded company-name research from Brønnøysundregistrene. NLOD 2.0 permits commercial reuse with attribution and change disclosure, but buyer-specific privacy and lawful-basis review may still be required for personal-data-bearing records; this Actor omits roles, contacts, and street address lines and never issues a KYC, procurement, sanctions, or eligibility verdict. Starts the bound Apify Actor with the caller's APIFY_TOKEN, may consume Apify usage, waits up to 60 seconds, and returns at most 1,000 source-linked rows without modifying government records.

civicdataforge--norway-company-evidence input schema
{
  "type": "object",
  "required": [
    "queries"
  ],
  "properties": {
    "queries": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "purpose"
        ],
        "properties": {
          "name": {
            "type": "string",
            "title": "Entity name",
            "maxLength": 180,
            "minLength": 2,
            "description": "Bounded official name search. The API's published candidates are returned; ambiguous candidates are not silently resolved."
          },
          "purpose": {
            "enum": [
              "ENTITY_VERIFICATION",
              "SUPPLIER_ONBOARDING_EVIDENCE",
              "PROCUREMENT_RESEARCH",
              "OTHER"
            ],
            "type": "string",
            "title": "Evidence purpose",
            "editor": "select",
            "enumTitles": [
              "Entity verification",
              "Supplier onboarding evidence",
              "Procurement research",
              "Other evidence purpose"
            ],
            "description": "Caller-declared workflow context recorded in the receipt; it never changes source facts or produces an eligibility verdict."
          },
          "reference": {
            "type": "string",
            "title": "Caller reference",
            "maxLength": 200,
            "description": "Optional non-sensitive caller reference bound into the evidence receipt."
          },
          "organisationNumber": {
            "type": "string",
            "title": "Organisation number",
            "description": "Exact nine-digit Norwegian organisation number."
          },
          "previousRecordReceipts": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "title": "Previous record receipts",
            "editor": "stringList",
            "maxItems": 50,
            "description": "Optional prior record receipt hashes used only for deterministic added, removed, or unchanged classification."
          },
          "previousDecisionReceiptHash": {
            "type": "string",
            "title": "Previous decision receipt",
            "description": "Optional prior SHA-256 decision receipt used only for deterministic change classification."
          }
        }
      },
      "title": "Company queries",
      "editor": "json",
      "prefill": [
        {
          "purpose": "SUPPLIER_ONBOARDING_EVIDENCE",
          "reference": "supplier-no-001",
          "organisationNumber": "974760673"
        }
      ],
      "maxItems": 25,
      "minItems": 1,
      "description": "One to 25 evidence queries. Prefer the exact nine-digit organisation number. A supplied name alongside an organisation number is returned as a consistency check, never as a replacement identifier."
    },
    "maxRecords": {
      "type": "integer",
      "title": "Maximum returned name candidates",
      "editor": "number",
      "default": 10,
      "maximum": 50,
      "minimum": 1,
      "description": "Name searches request one additional record internally so truncation is detected and disclosed."
    },
    "batchReference": {
      "type": "string",
      "title": "Batch reference",
      "editor": "textfield",
      "maxLength": 200,
      "description": "Optional non-sensitive batch reference bound into the shared batch receipt."
    }
  }
}
civicdataforge--norway-company-evidence annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get-actor-run — Get Actor run
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the status, storage identifiers, summary, and next step for an Actor run. A positive waitSecs value waits for a terminal state within the documented cap.

get-actor-run input schema
{
  "type": "object",
  "required": [
    "runId"
  ],
  "properties": {
    "runId": {
      "type": "string",
      "minLength": 1,
      "description": "Actor run ID."
    },
    "waitSecs": {
      "type": "integer",
      "default": 30,
      "maximum": 45,
      "minimum": 0,
      "description": "Seconds to wait for a terminal state."
    }
  },
  "additionalProperties": false
}
get-actor-run annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get-dataset-items — Get dataset items
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read result rows from a caller-owned Apify dataset, with bounded pagination and optional field selection.

get-dataset-items input schema
{
  "type": "object",
  "required": [
    "datasetId"
  ],
  "properties": {
    "desc": {
      "type": "boolean"
    },
    "omit": {
      "type": "string"
    },
    "clean": {
      "type": "boolean"
    },
    "limit": {
      "type": "integer",
      "minimum": 1
    },
    "fields": {
      "type": "string"
    },
    "offset": {
      "type": "number"
    },
    "flatten": {
      "type": "string"
    },
    "datasetId": {
      "type": "string",
      "minLength": 1,
      "description": "Dataset ID or username~dataset-name."
    }
  },
  "additionalProperties": false
}
get-dataset-items annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get-key-value-store-record — Get key-value store record
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read one exact record from a caller-owned Apify key-value store.

get-key-value-store-record input schema
{
  "type": "object",
  "required": [
    "keyValueStoreId",
    "recordKey"
  ],
  "properties": {
    "recordKey": {
      "type": "string",
      "minLength": 1,
      "description": "Exact record key."
    },
    "keyValueStoreId": {
      "type": "string",
      "minLength": 1,
      "description": "Key-value store ID or username~store-name."
    }
  },
  "additionalProperties": false
}
get-key-value-store-record annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
abort-actor-run — Abort Actor run
Advertised by the server during the last successful anonymous check.
Advertised destructive

Abort a caller-owned Actor run that is starting or running. Terminal runs are unchanged.

abort-actor-run input schema
{
  "type": "object",
  "required": [
    "runId"
  ],
  "properties": {
    "runId": {
      "type": "string",
      "minLength": 1,
      "description": "Actor run ID to abort."
    },
    "gracefully": {
      "type": "boolean",
      "description": "Request a graceful abort with the provider timeout."
    }
  },
  "additionalProperties": false
}
abort-actor-run annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
499 ms
95th percentile latency
499 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 499 ms · metadata changed · 15 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http civicdataforge-mcp https://civicdataforge.pages.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add civicdataforge-mcp --url https://civicdataforge.pages.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable civicdataforge-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "civicdataforge-mcp": {
      "url": "https://civicdataforge.pages.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "civicdataforge-mcp": {
      "type": "streamableHttp",
      "url": "https://civicdataforge.pages.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start civicdataforge-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "civicdataforge-mcp": {
      "type": "http",
      "url": "https://civicdataforge.pages.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http civicdataforge-mcp https://civicdataforge.pages.dev/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://civicdataforge.pages.dev/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "civicdataforge-mcp": {
      "serverUrl": "https://civicdataforge.pages.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like CivicDataForge MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.