{"openapi":"3.1.0","info":{"title":"Canada Open Data Search API","version":"0.1.0","description":"Canada Open Data Search wraps the keyless CKAN Action API of the Open Government Portal (open.canada.ca) so a small business or its agent can find the right federal dataset without browsing the portal. search_datasets runs a package_search with a query, an organization and a file-format filter; dataset_detail describes one dataset (title, publisher, licence, update frequency, last modified,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://ca-opendata-search.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/ca-opendata-search/docs"},"termsOfService":"https://connectorbay.com/ca-opendata-search/terms"},"servers":[{"url":"https://ca-opendata-search.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/ca-opendata-search/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/search_datasets":{"post":{"operationId":"search_datasets","summary":"Search the Open Government Portal (CKAN package_search) by keywords with an optional organization and file-format filter","description":"Search the Open Government Portal (CKAN package_search) by keywords with an optional organization and file-format filter; returns compact dataset summaries. Use for \"Is there a federal open dataset on tender notices, and what format is it in?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Search words, for example 'tender notices' or 'GST rates' (up to 200 characters); leave empty to browse by organization or format only. At most 300 characters.","title":"Query"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Portal organization name (a lowercase short name such as 'cra-arc' or 'statcan'), as shown in the 'organization' field of a result. At most 100 characters.","title":"Organization"},"format":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"File format of at least one resource, for example CSV, JSON, XML, XLSX, PDF. At most 20 characters.","title":"Format"},"rows":{"default":10,"description":"How many datasets to return (1 to 50)","maximum":50,"minimum":1,"title":"Rows","type":"integer"},"start":{"default":0,"description":"Offset of the first dataset to return, for paging (0 or more)","minimum":0,"title":"Start","type":"integer"},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Order of the results: relevance (default), modified_desc (most recently modified first) or modified_asc. At most 50 characters.","title":"Sort"}},"title":"search_datasetsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/dataset_detail":{"post":{"operationId":"dataset_detail","summary":"Metadata of one dataset by id: title in English and French, publisher, licence, update frequency, published and last-mod","description":"Metadata of one dataset by id: title in English and French, publisher, licence, update frequency, published and last-modified dates, keywords and a count of resources by type. Use for \"How often is the CanadaBuys tender notices dataset updated and when was it last modified?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_id":{"description":"Dataset id or name as used by the portal (a UUID such as 6abd20d4-7a1c-4b38-baa2-9525d0bb2fd2 for CanadaBuys tender notices). At most 100 characters.","title":"Dataset Id","type":"string"}},"required":["dataset_id"],"title":"dataset_detailArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/resource_links":{"post":{"operationId":"resource_links","summary":"Download links of a dataset: every resource with its name, format, language, type (dataset, guide, data dictionary, webs","description":"Download links of a dataset: every resource with its name, format, language, type (dataset, guide, data dictionary, website), URL and dates, exactly as published. Use for \"Where can I download the CanadaBuys tender notices as CSV?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_id":{"description":"Dataset id or name as used by the portal. At most 100 characters.","title":"Dataset Id","type":"string"},"format":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Keep only resources of this file format (for example CSV); leave empty for all. At most 20 characters.","title":"Format"}},"required":["dataset_id"],"title":"resource_linksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/recently_modified":{"post":{"operationId":"recently_modified","summary":"Datasets whose portal record was modified in the last N days, newest first, optionally for one organization. Use for \"Wh","description":"Datasets whose portal record was modified in the last N days, newest first, optionally for one organization. Use for \"Which federal open datasets were updated in the last week?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"days":{"default":7,"description":"Look back this many days from on_date (1 to 90)","maximum":90,"minimum":1,"title":"Days","type":"integer"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Portal organization name to restrict the list, for example 'statcan'. At most 100 characters.","title":"Organization"},"rows":{"default":20,"description":"How many datasets to list (1 to 50); the total count is always returned","maximum":50,"minimum":1,"title":"Rows","type":"integer"},"on_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The date to treat as today, YYYY-MM-DD (default: today, UTC); the window is the days before it. At most 40 characters.","title":"On Date"}},"title":"recently_modifiedArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/licence_note":{"post":{"operationId":"licence_note","summary":"Attribution wording and limits of the Open Government Licence - Canada, and (with a dataset id) the licence the portal r","description":"Attribution wording and limits of the Open Government Licence - Canada, and (with a dataset id) the licence the portal records for that dataset. Use for \"What attribution wording do I have to use when I republish data from the Open Government Portal?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional dataset id: also reports the licence id, title and URL the portal records for it. At most 100 characters.","title":"Dataset Id"}},"title":"licence_noteArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/business_dataset_shortlist":{"post":{"operationId":"business_dataset_shortlist","summary":"A curated shortlist of business-relevant federal datasets (tender notices, GST/HST rate history, recalls, sanctions list","description":"A curated shortlist of business-relevant federal datasets (tender notices, GST/HST rate history, recalls, sanctions list) with each dataset's live title, licence, frequency and last-modified date. Use for \"Which business-relevant federal datasets should my agent look at and are they current?\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"One of tenders, tax_rates, recalls, sanctions; leave empty for all. At most 100 characters.","title":"Topic"},"check_portal":{"default":true,"description":"Read each dataset's live record from the portal (default true); false returns the curated list only","title":"Check Portal","type":"boolean"}},"title":"business_dataset_shortlistArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}