Contractor License Verification (TradesAPI) vs PDFGate MCP Server

A side-by-side look at the Contractor License Verification (TradesAPI) and PDFGate MCP Server MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Contractor License Verification (TradesAPI) logoContractor License Verification (TradesAPI)Legal · Local subprocess (stdio)Verify contractor licenses: 50 states + DC + 8 cities — status, expiration, disciplinary history.59GoodAuth: not declaredPDFGate MCP Server logoPDFGate MCP ServerLegal · Local subprocess (stdio)MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.61GoodAuth: api key required

Verdict: choose Contractor License Verification (TradesAPI) for legal work as a local process; choose PDFGate MCP Server for legal as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Contractor License Verification (TradesAPI) logoChoose Contractor License Verification (TradesAPI) when

  • You need dedicated capabilities in the Legal domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: CLV_API_URL, CLV_API_KEY.
  • You want tools like verify_license, batch_verify, list_supported_states.
Explore Contractor License Verification (TradesAPI)

PDFGate MCP Server logoChoose PDFGate MCP Server when

  • You need dedicated capabilities in the Legal domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: API key required.
  • You have the keys it needs: PDFGATE_API_KEY.
  • You want tools like generate_pdf, upload_file, get_document.
Explore PDFGate MCP Server

Feature & specification comparison

Rows where the two servers differ are marked.

SpecContractor License Verification (TradesAPI) logoContractor License Verification (TradesAPI)PDFGate MCP Server logoPDFGate MCP Server
CategoryLegalLegal
Quality signal59/100 · Good61/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredAPI key required
PricingNot declaredBYOK (pay the provider)
Required env varsCLV_API_URLCLV_API_KEYPDFGATE_API_KEY
Verified ownerCommunity listingCommunity listing
GitHub stars00
Directory activity 2 views 0 installs 0 upvotes 5 views 0 installs 0 upvotes
Tools424

Tools & capabilities

Contractor License Verification (TradesAPI) tools 4

  • verify_licenseVerify a single US contractor's license against the official state (or city) licensing board. USE WHEN: the user has a specific license number and wants to confirm it's valid, current, and free of disciplinary action — e.g. 'is TX license TACLA00000103C still active?', 'check if this electrician's license expired', 'pull disciplinary history for this contractor.' DO NOT USE FOR: searching by contractor or business name when the license number is unknown (use search_by_name); discovering what states/cities are supported (use list_supported_states); verifying federal licenses, doctors/lawyers, or non-construction trades (out of scope). RETURNS: {valid, name, license_number, trade, expiration, status, state, disciplinary_actions[], source_url, cached, checked_at}. Result is fetched live from the authoritative state portal; active licenses are cached 24h, expired/not-found results are always re-fetched. EXAMPLE: state='TX', license_number='TACLA00000103C', trade='hvac' → {valid:true, name:'ANDERSON, ORIN RAE', status:'Active', expiration:'05/12/2026', source_url:'https://www.tdlr.texas.gov/...'}. ERRORS: 400 INVALID_INPUT (malformed license/state/trade — fix the args and retry); 502 STATE_PORTAL_UNAVAILABLE (the state portal itself is down — retry after a few minutes); 429 RATE_LIMITED (back off and retry). All errors return a human-readable message; transient errors (502/429) are safe to retry, 400 is not.
  • batch_verifyVerify up to 50 contractor licenses in a single call. Items are dispatched concurrently against their respective state/city portals; one item failing does not abort the others. USE WHEN: the user mentions verifying multiple licenses — phrases like 'I have 12 license numbers', 'verify these 5 contractors', 'bulk-check', 'verify them all', a list of subcontractors on a project, periodic compliance sweeps, COI/insurance review batches. **If the user has stated they want to verify N>1 licenses, this is the tool — don't fall back to list_supported_states first; the user already knows what they want to verify.** Even if the user hasn't pasted the list yet, batch_verify is the right next step (you can ask for the list, then call this). Cheaper in conversation turns than calling verify_license N times. DO NOT USE FOR: a single license (use verify_license — clearer output); >50 licenses in one call (split into multiple batches); searches by name (use search_by_name); discovering what states are supported (use list_supported_states). RETURNS: {summary: {total, succeeded, failed}, results: [{result, error}]} where each result is the same shape as verify_license, and `error` is non-null on per-item failures. Inspect individual `error` strings to retry just the failed items. EXAMPLE: licenses=[{state:'TX', license_number:'TACLA00000103C', trade:'hvac'}, {state:'CA', license_number:'1234567', trade:'general'}] → {summary:{total:2, succeeded:2, failed:0}, results:[...]}. ERRORS: per-item errors are reported in `results[i].error` rather than aborting the whole batch. Top-level 400 only fires on schema violations (e.g. >50 items, empty array).
  • list_supported_statesList every supported jurisdiction TradesAPI can verify contractor licenses against — all 50 US states, DC, and registered city-level licensing portals (Chicago, NYC, Philadelphia, Detroit, Atlanta, Dallas, Las Vegas, Nashville). USE WHEN: the user asks 'what states do you cover', 'do you support [state]', 'which cities have municipal licensing'; before constructing a verify_license call when you're unsure of the trade vocabulary; to confirm a portal is currently healthy before a batch run. DO NOT USE FOR: per-license verification (use verify_license); name searches (use search_by_name). RETURNS: {total_states, total_municipalities, states: [{code, name, portal_url, supported_trades[], supports_name_search, status, municipalities: [{code, city, portal_url, ...}]}]}. `status` is 'healthy' | 'degraded' | 'maintenance'. `supported_trades` is the set of trade values observed in test fixtures (best-effort; some search-only states may return []). `supports_name_search` indicates whether the state's portal allows search_by_name queries. EXAMPLE: returns 51 state rows (50 states + DC) with municipalities nested under their parent state — IL has Chicago nested, NY has NYC, etc. ERRORS: 502 STATE_PORTAL_UNAVAILABLE only if the API itself is down; this tool reads from registry metadata, not state portals, so it's normally always available.
  • search_by_nameFuzzy-search contractors by business or individual name within a single state (or city) licensing database. USE WHEN: the user has a contractor's name but not their license number — 'find Smith Plumbing in Texas', 'is there an active electrician named John Doe in California', vetting a contractor whose card you don't have in hand. Match is case-insensitive and tolerates partial words and reordered tokens (e.g. 'Smith Plumbing' matches 'Plumbing Smith Inc'). DO NOT USE FOR: license-number lookup (use verify_license — it's faster and authoritative); discovery of what states are supported (use list_supported_states); states where supports_name_search:false (the call will 400 — check list_supported_states first). RETURNS: {query: {state, name, trade}, total_results, results: [{name, license_number, trade, status, state, confidence, source_url}], cached, checked_at}. `confidence` is 0.0-1.0 (1.0 = exact match). Results are ranked by confidence descending. EXAMPLE: state='TN', city='nashville', name='100 PERCENT PLUMBING', trade='plumbing' → {results: [{name: '100 PERCENT PLUMBING INC', license_number: '...', confidence: 0.95, ...}]}. COST: this tool deducts 2 credits per call (vs 1 for verify_license) because name searches are more expensive — they may scrape multiple result pages. ERRORS: 400 NAME_SEARCH_NOT_SUPPORTED (this state's portal doesn't expose a name-search endpoint — check list_supported_states.supports_name_search); 502 STATE_PORTAL_UNAVAILABLE (retry); 429 RATE_LIMITED (back off).

PDFGate MCP Server tools 24

  • generate_pdfGenerate a PDF from a URL or raw HTML. Provide either 'url' or 'html', not both.
  • upload_fileUpload a PDF to PDFGate so it can be referenced by other operations. Provide either 'filePath' (local path) or 'url'.
  • get_documentRetrieve metadata for a stored PDFGate document by its ID.
  • delete_documentDelete a PDFGate document.
  • flatten_pdfFlatten an interactive PDF into a static, non-editable PDF. Creates a new document; does not overwrite the original.
  • extract_form_dataExtract form field values from a fillable PDF. Returns a JSON object mapping field names to their values.
  • add_form_fieldsAdd interactive form fields to a stored PDF — from placeholder tags (refined via fieldOverrides) and/or explicitly positioned fields.
  • compress_pdfCompress/optimise a PDF to reduce file size without changing visual content.
  • protect_pdfEncrypt a PDF with a password and optional permission restrictions. Produces a new document; the original is unchanged.
  • watermark_pdfApply a text or image watermark to a PDF. For type='text' provide 'text'; for type='image' provide 'watermarkImagePath'.
  • download_fileDownload the raw PDF bytes of a stored document, returned as an embedded resource. For a shareable link instead, use get_document.
  • create_envelopeCreate a signing envelope from one or more existing PDFGate documents. Each recipient is given either as email and name or as the recipientId of a stored recipient. Recipients marked embedded sign inside your application via create_embed_link and receive no emails. Use signingOrder to make recipients sign in sequence. Returns an envelope in 'created' status; call send_envelope to dispatch signing emails.
  • +12 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Contractor License Verification (TradesAPI)

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "contractor-license-verification-tradesapi-2": {
      "command": "npx",
      "args": [
        "-y",
        "contractor-license-mcp-server"
      ],
      "env": {
        "CLV_API_URL": "YOUR_CLV_API_URL_HERE",
        "CLV_API_KEY": "YOUR_CLV_API_KEY_HERE"
      }
    }
  }
}

PDFGate MCP Server

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "mcp-server-37": {
      "command": "npx",
      "args": [
        "-y",
        "@pdfgate/mcp-server"
      ],
      "env": {
        "PDFGATE_API_KEY": "YOUR_PDFGATE_API_KEY_HERE"
      }
    }
  }
}

Frequently asked questions

Contractor License Verification (TradesAPI) is categorized under Legal and uses a local stdio subprocess. PDFGate MCP Server belongs to Legal and uses a local stdio subprocess. Pick Contractor License Verification (TradesAPI) for legal work and PDFGate MCP Server for legal.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Contractor License Verification (TradesAPI) has no declared pricing — check the project's own site. PDFGate MCP Server is bring-your-own-key: usage is billed by the API provider you supply a key for. Auth: api key required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add contractor-license-verification-tradesapi-2 and mcp-server-37 as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Contractor License Verification (TradesAPI) has a quality signal of 59/100 (Good) with 2 views, 0 installs and 0 GitHub stars. PDFGate MCP Server has 61/100 (Good) with 5 views, 0 installs and 0 GitHub stars.