Skip to main content
Glama
yayabough
by yayabough

tolca-mcp

MCP server for Tolca: know who you're paying before you pay.

  • qc_contractor_check: Québec contractor check in one call. RBQ licence, RENA (barred from public contracts), environmental penalties, SEAO public contracts. Verdict ok / review / blocking / not_found, with sources and extraction dates.

  • qc_licence: does this business hold an active RBQ licence right now?

Free daily quota, no API key, no account. Deterministic JSON (no LLM in the loop).

Install

Claude Code:

claude mcp add tolca -- npx -y tolca-mcp

Claude Desktop, Cursor, VS Code, any stdio MCP client:

{
  "mcpServers": {
    "tolca": { "command": "npx", "args": ["-y", "tolca-mcp"] }
  }
}

Prefer remote? Use the hosted endpoint directly: https://tolca.tonbot.ca/mcp/public (streamable HTTP).

Related MCP server: NKO — Entity Registry Check

More tools (pay per call, x402)

The paid MCP server at https://tolca.tonbot.ca/mcp adds web_search (10 results + clean text of the top pages, $0.008), business_verification (sanctions, Canadian federal corporations, UK Companies House, GLEIF) and more, paid in USDC on Base per call. Point this bridge at it with TOLCA_MCP_URL=https://tolca.tonbot.ca/mcp.

How it works

This package is a thin stdio bridge: it lists the tools of the hosted Tolca server and forwards each call. The data and checks run on tolca.tonbot.ca.

Data: Régie du bâtiment du Québec, Autorité des marchés publics, MELCCFP, SEAO (Données Québec, CC-BY 4.0).

MIT licence. Website: https://tolca.tonbot.ca

Available Tools

2 tools
qc_contractor_checkQuébec contractor checkA
Read-onlyIdempotent

Check a Québec construction contractor against four official public data sources in one call: active RBQ licence (status, restrictions, bond, authorized work categories), RENA (businesses barred from public contracts and public subcontracts), environmental administrative penalties (MELCCFP) and public contracts awarded on SEAO (count, total amount, main public buyers, last 12 months). Returns a verdict ok / review / blocking / not_found with reasons, sources and extraction dates. Use when the user asks whether a Québec contractor, subcontractor or renovation company is licensed, trustworthy or eligible for public contracts. Provide neq, licence or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
neqNoQuébec enterprise number (NEQ), 10 digits
langNoAnswer language, default fr
nameNoBusiness name, exact or partial
licenceNoRBQ licence number, e.g. 8315-8105-31

Output Schema

ParametersJSON Schema
NameRequiredDescription
rbqYesRBQ licence record: licence, neq, name, status, restriction, bond, municipality, subcategory_labels, candidates
renaYesMatching RENA entries (public-contract ban)
queryYesWhat was searched and how it matched
noticeNo
reasonsYesPlain-language reasons for the verdict
sourcesYesOfficial sources with extraction dates
verdictYesok = active licence, no RENA, no penalty; review = something to look at; blocking = RENA listing or no active licence; not_found = no match
verdict_labelYes
public_contractsNoPublic contracts awarded on SEAO in the last 12 months: contracts, total_cad, first_award, last_award, buyers, by_category, recent (up to 5), matched_by
environmental_penaltiesYesMatching environmental administrative penalties

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world and non-destructive behavior, so the bar is lower; the description still adds real value by naming the four sources queried, the 12-month contract window, and that extraction dates accompany the verdict. It does not mention latency, rate limits, or what happens when no source matches.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both front-loaded with the key facts (sources first, then when-to-use and inputs). The first sentence is clause-dense, but no sentence is wasted or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not needed, and the description still summarizes the verdict model. Sources, trigger conditions, identifier options and freshness are all covered, which is complete for an agent deciding whether and how to call this multi-source lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a disjunction not expressed in the schema (zero required params): the caller must supply neq, licence or name. It does not explain acceptable name-matching fuzziness or the effect of lang, though the schema documents both.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) plus resource (Québec construction contractor) and enumerates the four data sources and their scope. It clearly differentiates itself from the sibling qc_licence by covering RBQ licence plus RENA, MELCCFP penalties and SEAO contracts in one call, and names the verdict values returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use when the user asks whether a Québec contractor, subcontractor or renovation company is licensed, trustworthy or eligible for public contracts') and tells the agent which identifier to supply. It does not state when to prefer the sibling qc_licence over this broader check, so the alternative-route guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qc_licenceQuébec RBQ licence lookupA
Read-onlyIdempotent

Fast lookup: does this Québec business hold an ACTIVE RBQ (Régie du bâtiment du Québec) construction licence right now? Returns active true/false, licence number, legal name, NEQ, municipality, restriction flag and authorized work categories. Good for checking several contractors one after another. For the RENA public-contract ban and environmental penalties, use qc_contractor_check. Provide neq, licence or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
neqNoQuébec enterprise number (NEQ), 10 digits
langNoAnswer language, default fr
nameNoBusiness name, exact or partial
licenceNoRBQ licence number, e.g. 8315-8105-31

Output Schema

ParametersJSON Schema
NameRequiredDescription
neqYes
nameYes
noteNo
queryYes
activeYestrue if an ACTIVE RBQ licence was found
sourceYes
licenceYes
candidatesYesOther possible matches when the name is ambiguous
categoriesYesAuthorized RBQ work subcategories
restrictedNo
municipalityYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely non-structured behavior: the result reflects current status ('right now', ACTIVE), which implies a live external lookup rather than a cached record, and enumerates the returned fields including the restriction flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with the core capability, return shape, batch hint, sibling exclusion and parameter guidance front-loaded in that order. No filler and nothing repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with an output schema, an alternative sibling and 100% parameter coverage, the description supplies everything needed: what it answers, what comes back, which identifier to pass, and when to prefer the other tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3. The closing 'Provide neq, licence or name' adds meaning the schema does not: despite zero required parameters, at least one identifier must be supplied, and any of the three is acceptable. That is useful disambiguation beyond the per-field descriptions, though it does not explain precedence when several are supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('does this Québec business hold an ACTIVE RBQ construction licence right now'), plus the exact return payload. It also names the sibling it is not for (RENA ban / environmental penalties), so an agent can distinguish it from qc_contractor_check without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use this for live RBQ licence status, use qc_contractor_check for the RENA public-contract ban and environmental penalties. It also flags the batch use case ('good for checking several contractors one after another'), which is exactly the kind of when-to-use context that is otherwise invisible.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.0.0
    • First observedqc_contractor_check
    • First observedqc_licence

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation4/5

The two tools overlap on RBQ licence checks, but descriptions clearly distinguish qc_licence as a fast single-source lookup and qc_contractor_check as a comprehensive multi-source verification. The explicit pointer from qc_licence to qc_contractor_check for additional checks reduces potential confusion.

Naming Consistency3/5

Both names use snake_case and a 'qc_' prefix, but the structure is inconsistent: qc_licence is a simple noun while qc_contractor_check is noun_verb. There is no predictable verb_noun pattern, though the names remain readable.

Tool Count3/5

Only two tools are provided, which feels thin for a contractor verification domain that could support separate checks per data source or batch operations. However, the comprehensive tool consolidates most needs, making the count borderline rather than severely lacking.

Completeness4/5

The tools cover four key public data sources (RBQ, RENA, environmental penalties, SEAO) and support lookup by NEQ, licence, or name. This is strong coverage for the stated purpose, though other potential checks like workplace safety or legal disputes are not addressed.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    eu-verify lets AI agents verify any European business partner: company existence (official French SIREN registry), insolvency records (BODACC), EU VAT validation before invoicing (VIES), SIRET/IBAN/LEI checks, address and email verification, French business-day deadlines and EU public tenders. 10 paid MCP tools + a free catalog tool, plus 81 HTTP endpoints. Each call costs $0.001-$0.01 in USDC on
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Cross-checks company/entity records against 23 national commercial registries (GLEIF, SIRENE, VIES, TED, Companies House) to flag missing or inconsistent registrations. Free tier: 100 calls/month via hosted API.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables official-source lookups on people and companies, covering registration status, tax and labor clearance certificates, sanctions lists, trademarks/patents, and electronic invoices, with platform-hosted pay-per-query access.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents and procurement systems to verify contractor licenses against official state boards, search contractors by trade and location, audit workers' comp, surety bonds and OSHA safety records, and check SAM.gov federal debarment status. It returns a deterministic ALLOW/WARN/BLOCK compliance decision plus registry health metrics for US trade contractors.
    MIT