portugal
Registry code: e1760c74ea0c471e
Portugal's public data in one server: weather and warnings (IPMA), places and postal codes, official statistics (INE, Banco de Portugal), Parliament, public contracts, the national open-data portal, the health service (SNS), medicines and pharmacies, fuel and EV charging, Lisbon-area buses, train, metro, bus and tram timetables (CP, Lisbon, Porto, Coimbra, Braga, Aveiro, Cascais, Barreiro, the Algarve, Madeira) and FlixBus coaches, live bus positions (Porto, Coimbra, Lisbon), tourism registers (local accommodation, Blue Flag beaches, hotels, surf, routes), Lisbon city data (events, street…
- endpoint
- https://mcp.thiagolannes.com/portugal
- protocol
- http-sse ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is portugal live?
- Yes — it answered the hub's last check (checked 13h ago). It answered 100% of checks over the last 30 days.
- Is portugal free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does portugal have?
- 56 tools: sea_forecast, earthquakes, ine_search, ine_indicator, bpstat_series, parliament_search, parliament_initiative, parliament_votes, ….
- Is portugal safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 100%· all time 100%
last good check
of 56 tools
- unknown → live
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
bus_find_stops open 13h ago
Find Carris Metropolitana bus stops by name and/or near a coordinate. Use this first whenever the user names a place, street, station or gives a location, to get the stop_id needed by bus_next_arrivals. Results include the lines serving each stop. Args: query: Text to match in the stop name (accent/case-insensitive, all words must match), e.g. "Gare do Oriente", "Cacilhas terminal". A 6-digit stop id also works. lat, lon: A coordinate (WGS84). Results are sorted by straight-line distance from it. Note: buses inside Lisbon city are mostly run by Carris (a different company, not covered here); Carris Metropolitana serves the wider region. radius_m: Only stops within this many metres of lat/lon. Default 500 when no query is given; unlimited when a query is given. limit: Max stops to return (default 10, max 50).
{ "type": "object", "title": "find_stopsArguments", "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 10 }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null }, "radius_m": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Radius M", "default": null } } }arguments 59 linessea_forecast unknown never probed
Coastal sea forecast: wave height and period, wave direction, sea temperature (IPMA). Args: place: coastal spot, e.g. "Nazaré", "Peniche", "Faro", "Funchal". Or pass lat/lon for the nearest one. day: 0 = today, 1 = tomorrow, 2 = the day after.
{ "type": "object", "title": "sea_forecastArguments", "properties": { "day": { "type": "integer", "title": "Day", "default": 0 }, "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "place": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place", "default": null } } }arguments 47 linesearthquakes unknown never probed
Recent earthquakes recorded by IPMA. Args: region: "mainland" (mainland Portugal and Madeira) or "azores". days: look back this many days (max 30). min_magnitude: only quakes at or above this magnitude. limit: max rows (newest first).
{ "type": "object", "title": "earthquakesArguments", "properties": { "days": { "type": "integer", "title": "Days", "default": 7 }, "limit": { "type": "integer", "title": "Limit", "default": 20 }, "region": { "type": "string", "title": "Region", "default": "mainland" }, "min_magnitude": { "type": "number", "title": "Min Magnitude", "default": 0 } } }arguments 26 linesine_search unknown never probed
Find INE indicators by keyword (e.g. "inflação", "desemprego", "população", "rendas", "turismo"). Searches INE's catalogue of key indicators. Returns varcd codes to pass to ine_indicator. Any other INE indicator can be read with ine_indicator if you know its code (from www.ine.pt). Args: lang: "PT" (more complete wording) or "EN".
{ "type": "object", "title": "ine_searchArguments", "required": [ "query" ], "properties": { "lang": { "type": "string", "title": "Lang", "default": "PT" }, "limit": { "type": "integer", "title": "Limit", "default": 10 }, "query": { "type": "string", "title": "Query" } } }arguments 23 linesine_indicator unknown never probed
Values of an INE indicator, latest periods first. Args: varcd: 7-digit indicator code from ine_search, e.g. "0008074". place: geography name to keep, e.g. "Portugal", "Lisboa", "Norte", "Porto". Default: "Portugal" when present, otherwise all geographies. periods: how many of the latest reference periods to return (1-24). category: keep only rows whose category labels contain this text (e.g. "Total", "Mulheres"). lang: "PT" or "EN". limit: max rows.
{ "type": "object", "title": "ine_indicatorArguments", "required": [ "varcd" ], "properties": { "lang": { "type": "string", "title": "Lang", "default": "PT" }, "limit": { "type": "integer", "title": "Limit", "default": 40 }, "place": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place", "default": null }, "varcd": { "type": "string", "title": "Varcd" }, "periods": { "type": "integer", "title": "Periods", "default": 3 }, "category": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Category", "default": null } } }arguments 52 linesbpstat_series unknown never probed
Observations of Banco de Portugal series (ids from bpstat_search). Args: series_ids: one or more series ids (max 10), e.g. [12559924]. last_n: latest observations per series (1-500). Ignored when `since` is given. since: "YYYY-MM-DD" — return every observation from this date. lang: "PT" or "EN".
{ "type": "object", "title": "bpstat_seriesArguments", "required": [ "series_ids" ], "properties": { "lang": { "type": "string", "title": "Lang", "default": "PT" }, "since": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Since", "default": null }, "last_n": { "type": "integer", "title": "Last N", "default": 12 }, "series_ids": { "type": "array", "items": { "type": "integer" }, "title": "Series Ids" } } }arguments 38 linesparliament_search unknown never probed
Search initiatives in the Portuguese Parliament: bills, resolutions, inquiries. Args: query: words in the title, e.g. "habitação", "IRS", "imigração". type: e.g. "Projeto de Lei", "Proposta de Lei" (Government bills), "Projeto de Resolução". author: party acronym ("PS", "PSD", "CH", "IL", "L", "PCP", "BE", "CDS-PP", "PAN", "JPP") or "Governo". result: "aprovado" or "rejeitado" — keeps initiatives whose latest vote had this result. since: "YYYY-MM-DD" — submitted on or after this date. legislature: Roman numeral, default the current one (XVII). limit: max results, newest first.
{ "type": "object", "title": "parliament_searchArguments", "properties": { "type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Type", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 10 }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null }, "since": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Since", "default": null }, "author": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Author", "default": null }, "result": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Result", "default": null }, "legislature": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Legislature", "default": null } } }arguments 83 linesparliament_initiative unknown never probed
Full record of one initiative: every phase with dates, every vote with each group's position, text link. Args: initiative_id: the `id` from parliament_search (e.g. "356403"), or a reference like "Proposta de Lei 3".
{ "type": "object", "title": "parliament_initiativeArguments", "required": [ "initiative_id" ], "properties": { "legislature": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Legislature", "default": null }, "initiative_id": { "type": "string", "title": "Initiative Id" } } }arguments 25 linesparliament_votes unknown never probed
Recent plenary votes, with how each parliamentary group voted. Args: party: show this group's position on each vote (e.g. "PS", "CH"); only votes where it is recorded. query: words in the initiative title. since: "YYYY-MM-DD". result: "aprovado" or "rejeitado". limit: max votes, newest first.
{ "type": "object", "title": "parliament_votesArguments", "properties": { "limit": { "type": "integer", "title": "Limit", "default": 20 }, "party": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Party", "default": null }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null }, "since": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Since", "default": null }, "result": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Result", "default": null }, "legislature": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Legislature", "default": null } } }arguments 71 linesparliament_deputies unknown never probed
Members of Parliament (deputados): party, constituency (círculo), status. Seats per party included. Args: name: part of the parliamentary or full name. party: group acronym, e.g. "PSD", "PS", "CH". constituency: e.g. "Lisboa", "Porto", "Açores", "Europa". include_inactive: also list deputies who left or were replaced. Default false.
{ "type": "object", "title": "parliament_deputiesArguments", "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 50 }, "party": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Party", "default": null }, "legislature": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Legislature", "default": null }, "constituency": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Constituency", "default": null }, "include_inactive": { "type": "boolean", "title": "Include Inactive", "default": false } } }arguments 64 linespublic_contracts unknown never probed
Search Portuguese public contracts (Portal BASE) for one year. Args: query: words in the contract object, e.g. "software", "limpeza", "ambulâncias". buyer: public body name or 9-digit NIF, e.g. "Município de Lisboa", "SPMS". supplier: company name or NIF. procedure: e.g. "Ajuste Direto", "Concurso público", "Consulta Prévia". min_value, max_value: contract price range in euros. year: contract-file year (default: this year; 2012 onwards). sort: "value" (largest first) or "date" (newest first). limit: max rows.
{ "type": "object", "title": "public_contractsArguments", "properties": { "sort": { "type": "string", "title": "Sort", "default": "value" }, "year": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Year", "default": null }, "buyer": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Buyer", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 15 }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null }, "supplier": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Supplier", "default": null }, "max_value": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Max Value", "default": null }, "min_value": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Min Value", "default": null }, "procedure": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Procedure", "default": null } } }arguments 100 linespublic_contracts_summary unknown never probed
Totals for one buyer or supplier in a year: number of contracts, total value, by procedure, top partners. Args: entity: name or 9-digit NIF of a public body or a company. role: "buyer", "supplier" or "any". year: default this year. top: how many top counterparties to list.
{ "type": "object", "title": "public_contracts_summaryArguments", "required": [ "entity" ], "properties": { "top": { "type": "integer", "title": "Top", "default": 10 }, "role": { "type": "string", "title": "Role", "default": "any" }, "year": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Year", "default": null }, "entity": { "type": "string", "title": "Entity" } } }arguments 35 linesopen_data_search unknown never probed
Search the datasets of Portugal's national open-data portal (dados.gov.pt). Args: query: e.g. "acidentes rodoviários", "escolas", "qualidade do ar", "alojamento local". organization: optional publisher to filter by, e.g. "INE", "Lisboa" or "Câmara Municipal de Cascais" (a town name finds its town hall's datasets: Lisboa, Porto, Cascais, Oeiras...). limit: max results (1-50).
{ "type": "object", "title": "open_data_searchArguments", "required": [ "query" ], "properties": { "limit": { "type": "integer", "title": "Limit", "default": 10 }, "query": { "type": "string", "title": "Query" }, "organization": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Organization", "default": null } } }arguments 30 linesopen_data_dataset unknown never probed
Details and downloadable files of one dados.gov.pt dataset (id or slug from open_data_search).
{ "type": "object", "title": "open_data_datasetArguments", "required": [ "dataset" ], "properties": { "dataset": { "type": "string", "title": "Dataset" } } }arguments 13 linesopen_data_preview unknown never probed
First rows of a CSV or JSON file hosted on dados.gov.pt (reads at most 512 KB). Args: url: a resource url from open_data_dataset (must be on dados.gov.pt). rows: how many rows to return (1-100).
{ "type": "object", "title": "open_data_previewArguments", "required": [ "url" ], "properties": { "url": { "type": "string", "title": "Url" }, "rows": { "type": "integer", "title": "Rows", "default": 20 } } }arguments 18 linessns_find_institutions unknown never probed
Find SNS hospitals / local health units (ULS) by name, or the nearest ones to a coordinate. Use this first when the user names a hospital or a place ("hospitals near Lisbon", "is there an emergency department near 38.72,-9.14?"), then pass `stats_entity` to sns_emergency_stats / sns_surgery_wait_stats / sns_consultation_wait_stats. Each result: name, its parent ULS, coordinates, distance_km (when lat/lon given), whether it reports emergency / consultation / surgery data on tempos.min-saude.pt, and `stats_entity` — the name under which the official statistics report it (statistics are per ULS / hospital group, not per building). This list does NOT contain live waiting times; for live emergency waits send the user to https://tempos.min-saude.pt. Args: query: Part of the name, accent-insensitive, e.g. "Santa Maria", "Faro", "ULS Algarve". lat, lon: Sort by distance from this point (WGS84), e.g. Lisbon 38.7223, -9.1393. Without `query`, umbrella ULS entries are skipped (they duplicate a hospital's location). emergency_only: Only places that report emergency-department data. limit: Max results (default 10, max 50).
{ "type": "object", "title": "find_institutionsArguments", "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 10 }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null }, "emergency_only": { "type": "boolean", "title": "Emergency Only", "default": false } } }arguments 52 linessns_emergency_stats unknown never probed
Emergency-department (urgência) visits per month: by type and by Manchester triage colour. Use for "how busy is the ER at X?", "how many emergency visits in the Algarve last month?", "what share of ER visits are green/blue (non-urgent)?". OFFICIAL MONTHLY STATISTICS ONLY — not the live queue (the latest month is usually 2-3 months back and provisional). For live waiting times send the user to https://tempos.min-saude.pt. Not medical advice: in an emergency call 112; SNS 24 (808 24 24 24) for advice. Scope: one institution, one region, or (neither) all of mainland Portugal's SNS hospitals. Per period (latest first): visits_in_month and visits_year_to_date by type (general, paediatric, obstetric, psychiatric, total), triage_in_month by colour (red = immediate, orange = very urgent, yellow = urgent, green = less urgent, blue = non-urgent, white = not clinical / other) and triage_share_in_month_pct. Args: institution: Hospital or ULS name, accent-insensitive ("Santa Maria", "São João", "Hospital de Faro"). A hospital is mapped to its ULS; check `scope`. region: Norte | Centro | LVT (Lisboa) | Alentejo | Algarve. Ignored if institution is given. period: Latest month to include, "YYYY-MM" (default: newest available). months: How many months back to return (default 6, max 24).
{ "type": "object", "title": "emergency_statsArguments", "properties": { "months": { "type": "integer", "title": "Months", "default": 6 }, "period": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Period", "default": null }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Region", "default": null }, "institution": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Institution", "default": null } } }arguments 47 linessns_surgery_wait_stats unknown never probed
Surgery access indicators per month: surgical waiting list, % within the guaranteed maximum time, mean days from admission to surgery, and surgeries performed. Use for "how long is the wait for surgery at X?", "how many people are on the surgery list in the Norte region?", "how many operations did hospital Y do?". Official monthly statistics (latest month usually 2-3 months back, provisional). The open data has NO breakdown by specialty or procedure — say so if asked for one. Per period (latest first): - waiting_list: patients on the surgical waiting list (LIC) at month end, how many are still within the legal maximum guaranteed response time (TMRG, 180 days for normal priority since 2018) and the % within it. - mean_days_before_surgery_in_month / _year_to_date: average days between hospital admission and the operation for scheduled inpatient surgery (this is NOT the time on the waiting list). - surgeries_in_month / surgeries_year_to_date: scheduled (= inpatient + day surgery) and urgent. Args: institution: Hospital or ULS name ("Santa Maria", "Coimbra", "IPO Porto"); mapped to its ULS. region: Norte | Centro | LVT (Lisboa) | Alentejo | Algarve. Ignored if institution is given. period: Latest month to include, "YYYY-MM" (default: newest available). months: How many months back (default 6, max 24).
{ "type": "object", "title": "surgery_wait_statsArguments", "properties": { "months": { "type": "integer", "title": "Months", "default": 6 }, "period": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Period", "default": null }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Region", "default": null }, "institution": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Institution", "default": null } } }arguments 47 linessns_consultation_wait_stats unknown never probed
Hospital outpatient consultations per month and the % of FIRST specialist consultations (referred by a family doctor via CTH/SIGA) held within the guaranteed maximum time (TMRG). Use for "how long is the wait for a first hospital appointment at X?", "is hospital Y on time with first consultations?", "how many consultations did the Centro region do?". Official monthly statistics (latest month usually 2-3 months back, provisional); there is no breakdown by specialty in the open data. Per period (latest first): consultations_in_month / _year_to_date (total, first, subsequent) and first_consultations_within_max_time_pct for the month and year-to-date. Args: institution: Hospital or ULS name; mapped to its ULS. region: Norte | Centro | LVT (Lisboa) | Alentejo | Algarve. Ignored if institution is given. period: Latest month to include, "YYYY-MM" (default: newest available). months: How many months back (default 6, max 24).
{ "type": "object", "title": "consultation_wait_statsArguments", "properties": { "months": { "type": "integer", "title": "Months", "default": 6 }, "period": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Period", "default": null }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Region", "default": null }, "institution": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Institution", "default": null } } }arguments 47 linessns_search_datasets unknown never probed
Search the ~150 datasets of the SNS Transparency portal (titles and descriptions are in Portuguese). Use when the curated tools don't cover the question — e.g. hospital bed occupancy ("ocupação"), births/caesareans ("partos"), INEM pre-hospital calls, SNS 24 calls, family doctor coverage ("médico de família", "inscritos"), medicines spending, staff ("trabalhadores"), cancer screening ("rastreios"). Then call sns_query_dataset with the dataset_id and the field names returned here. Portuguese keywords work best; matching is accent-insensitive. Args: query: Keywords, e.g. "ocupação internamento", "partos", "urgência". Empty = list all (id + title). limit: Max results (default 10, max 50; ignored when listing all).
{ "type": "object", "title": "search_datasetsArguments", "properties": { "limit": { "type": "integer", "title": "Limit", "default": 10 }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null } } }arguments 23 linessns_query_dataset unknown never probed
Run an ODSQL query on any SNS Transparency portal dataset (Opendatasoft Explore API v2.1). Use after sns_search_datasets for anything the curated tools don't cover. Clauses are ODSQL: - where: `instituicao like "santa maria" and tempo >= date'2026-01-01'` (`like` is a case- and accent-insensitive "contains"; dates use date'YYYY-MM-DD') - select: `tempo, instituicao, total_urgencias` or aggregates `sum(total_urgencias) as total` - group_by: `regiao` or `tempo` (combine with aggregates in select) - order_by: `tempo desc` Most hospital-activity datasets (field `tempo`, monthly) store YEAR-TO-DATE CUMULATIVE values: December is the annual total; a single month = this month minus the previous one. Many datasets have a `regiao` and an `instituicao` (or `entidade`) field. Official statistics, not live data. Args: dataset_id: e.g. "ocupacao-do-internamento" (from sns_search_datasets). where, select, group_by, order_by: ODSQL clauses (optional). limit: Rows to return (default 20, max 100). offset: Skip rows, for paging.
{ "type": "object", "title": "query_datasetArguments", "required": [ "dataset_id" ], "properties": { "limit": { "type": "integer", "title": "Limit", "default": 20 }, "where": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Where", "default": null }, "offset": { "type": "integer", "title": "Offset", "default": 0 }, "select": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Select", "default": null }, "group_by": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Group By", "default": null }, "order_by": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Order By", "default": null }, "dataset_id": { "type": "string", "title": "Dataset Id" } } }arguments 71 linesmedicine_availability unknown never probed
Is a medicine in shortage in Portugal? Checks Infarmed's published availability information. Use when someone can't find a medicine, or asks whether X is in shortage ("rutura", "esgotado", "falta"). Searches by brand or active substance (Portuguese names work best, e.g. "quetiapina", "Ozempic", "ácido acetilsalicílico"; dose and form narrow it, e.g. "quetiapina 300 mg libertação prolongada"). Checks, all from www.infarmed.pt (latest versions are found automatically): - shortages Infarmed is actively monitoring (with its circulars and advice); - the monthly list of medicines whose export is temporarily suspended because of shortage / supply risk in Portugal; - the quarterly prior-notification list (LNP) of medicines with availability concerns. status is one or more of: monitored_shortage, export_suspended, prior_notification, no_issue_in_published_lists. "No issue" does not prove the medicine is available: Infarmed's full shortage search is not queried (see not_checked). Args: medicine: Brand name or active substance, optionally with strength/form. limit: Max rows returned per list (default 15).
{ "type": "object", "title": "availabilityArguments", "required": [ "medicine" ], "properties": { "limit": { "type": "integer", "title": "Limit", "default": 15 }, "medicine": { "type": "string", "title": "Medicine" } } }arguments 18 linespharmacies unknown never probed
Pharmacies in a Portuguese municipality, with which ones are on duty today and open now. Use for "farmácia de serviço em X", "pharmacy open now near me", or to list pharmacies to call. Each pharmacy has name, address, phone, coordinates, today's hours, open_now, on_duty (official duty roster for the duty day 09:00-09:00) and the duty type (e.g. "Permanente - Aberta 24h"). Results are sorted: on duty first, then open now, then distance (when lat/lon are given). Stock is not public: never say a pharmacy has a medicine. Args: city: Municipality or town/parish, e.g. "Lisboa", "Porto", "Cascais", "Alvalade, Lisboa" (add ", <municipality>" to disambiguate a town). lat, lon: Optional user position: adds distance_km and allows radius_km. With no city, the municipality is found from the coordinate. radius_km: Keep only pharmacies within this distance of lat/lon. on_duty_only: Only pharmacies on the duty roster today. open_now_only: Only pharmacies open right now. limit: Max pharmacies returned (default 20, max 100).
{ "type": "object", "title": "pharmaciesArguments", "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "City", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 20 }, "radius_km": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Radius Km", "default": null }, "on_duty_only": { "type": "boolean", "title": "On Duty Only", "default": false }, "open_now_only": { "type": "boolean", "title": "Open Now Only", "default": false } } }arguments 69 linesfind_medicine_near unknown 13h ago
One-shot answer to "I need medicine X in city Y — what do I do?" in Portugal. Runs medicine_availability(medicine) and pharmacies(city or lat/lon), and returns: the shortage status (compact), the pharmacies on duty today and the ones open now (nearest first when lat/lon are given), the help lines (Linha 1400, SNS 24, 112) and next steps. It never says a pharmacy has the medicine: stock is not public. Args: medicine: Brand name or active substance, e.g. "quetiapina", "Brufen 400". city: Municipality or town, e.g. "Lisboa". Or give lat/lon instead. lat, lon: Optional user position (sorts pharmacies by distance). limit: Max pharmacies returned (default 8).
{ "type": "object", "title": "find_medicine_nearArguments", "required": [ "medicine" ], "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "city": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "City", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 8 }, "medicine": { "type": "string", "title": "Medicine" } } }arguments 54 linesev_charger_detail unknown never probed
Everything about one MOBI.E charging site: all its points with live status, power, connectors and price, plus operator contact, opening hours and accepted authentication (app, RFID card, credit card...). Use after ev_chargers. Accepts a site_id (e.g. "EZC-AMD-00051"), a point_id (e.g. "AMD-00051-1") or an EVSE id (e.g. "PT*EZC*E*AMD*00051*1").
{ "type": "object", "title": "ev_charger_detailArguments", "required": [ "site_or_point_id" ], "properties": { "site_or_point_id": { "type": "string", "title": "Site Or Point Id" } } }arguments 13 linesbus_service_alerts unknown never probed
Service alerts (detours, works, strikes, stops not served) for Carris Metropolitana. Use before recommending a trip, or when the user asks "is line X disrupted?". Filter by line and/or stop; with no filter, returns all current alerts (there are often ~100). Alerts are mostly published in Portuguese only. Args: line_id: 4-digit line number, e.g. "4407". stop_id: 6-digit stop id, e.g. "160584". include_upcoming: Also return alerts that start in the future (default True). language: Preferred language ("pt" or "en"); falls back to what exists. limit: Max alerts to return (default 20, max 100).
{ "type": "object", "title": "service_alertsArguments", "properties": { "limit": { "type": "integer", "title": "Limit", "default": 20 }, "line_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Line Id", "default": null }, "stop_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Stop Id", "default": null }, "language": { "type": "string", "title": "Language", "default": "pt" }, "include_upcoming": { "type": "boolean", "title": "Include Upcoming", "default": true } } }arguments 45 linestransit_find_stops unknown never probed
Find train stations, metro stations or bus/tram stops by name, or the nearest to a point. Args: query: e.g. "Oriente", "Porto Campanhã", "Marquês de Pombal", "Prazeres". operator: an operator id (see transit_operators) or a city/region: "porto", "coimbra", "braga", "aveiro", "cascais", "barreiro", "algarve", "faro", "madeira", or "intercity" (FlixBus coaches and CP). Default: CP and the Lisbon operators. lat, lon: find the nearest instead of (or as well as) by name.
{ "type": "object", "title": "transit_find_stopsArguments", "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 8 }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null }, "operator": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Operator", "default": null } } }arguments 59 linestransit_departures unknown never probed
Scheduled departures from a station or stop (official timetable, not live). Args: stop: station or stop name, e.g. "Lisboa Oriente", "Cais do Sodré", "Baixa-Chiado", "Prazeres". operator: an operator id (see transit_operators) or a city/region: "porto", "coimbra", "braga", "aveiro", "cascais", "barreiro", "algarve", "faro", "madeira", or "intercity" (FlixBus coaches and CP). Default: CP and the Lisbon operators. when: ISO date-time in Lisbon time, e.g. "2026-11-03T08:00". Default: now. window_minutes: how far ahead to look (max 720). line: keep only a line or destination, e.g. "28E", "Sintra", "Azul".
{ "type": "object", "title": "transit_departuresArguments", "required": [ "stop" ], "properties": { "line": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Line", "default": null }, "stop": { "type": "string", "title": "Stop" }, "when": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "When", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 12 }, "operator": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Operator", "default": null }, "window_minutes": { "type": "integer", "title": "Window Minutes", "default": 90 } } }arguments 59 linestransit_trips_between unknown never probed
Direct services between two stations (no changes), with departure, arrival and duration. Examples: CP "Lisboa Oriente" → "Porto Campanhã"; Fertagus "Roma-Areeiro" → "Setúbal"; Metro "Alameda" → "Aeroporto" (same line only). Scheduled times, not live. Args: operator: an operator id (see transit_operators) or a city/region: "porto", "coimbra", "braga", "aveiro", "cascais", "barreiro", "algarve", "faro", "madeira", or "intercity" (FlixBus coaches and CP). Default: CP and the Lisbon operators. when: ISO date-time in Lisbon time; default now. window_minutes: departures within this window (max 1440).
{ "type": "object", "title": "transit_trips_betweenArguments", "required": [ "origin", "destination" ], "properties": { "when": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "When", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 6 }, "origin": { "type": "string", "title": "Origin" }, "operator": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Operator", "default": null }, "destination": { "type": "string", "title": "Destination" }, "window_minutes": { "type": "integer", "title": "Window Minutes", "default": 240 } } }arguments 52 linestransit_vehicles unknown never probed
Where the buses (and Lisbon trams) are right now: live positions reported by the vehicles. Args: operator: "stcp" (Porto buses), "smtuc" (Coimbra buses) or "carris" (Lisbon buses and trams). City names work too: "porto", "coimbra", "lisboa". line: keep one line, e.g. "500", "205", "28E", "103". lat, lon: keep the vehicles near this point (within radius_km), closest first. For Greater-Lisbon buses use bus_vehicle_positions / bus_next_arrivals (Carris Metropolitana).
{ "type": "object", "title": "transit_vehiclesArguments", "required": [ "operator" ], "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "line": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Line", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 20 }, "operator": { "type": "string", "title": "Operator" }, "radius_km": { "type": "number", "title": "Radius Km", "default": 1 } } }arguments 59 lineswildfires unknown never probed
Burnt areas from wildfires in Portugal, mapped by satellite (EFFIS / Copernicus). Not a live list of fires in progress: EFFIS maps burnt areas from satellite a day or more later, and small fires can be missing. Args: period: "today", "week", "month" or "season" (this year so far). Ignored when `year` is given. year: a past year from 2016, for the whole year. place: keep fires whose region or parish contains this, e.g. "Algarve", "Monchique", "Viseu". min_hectares: only fires at least this large. sort: "area" (largest first) or "date" (newest first). limit: max fires listed (totals always cover every match).
{ "type": "object", "title": "wildfiresArguments", "properties": { "sort": { "type": "string", "title": "Sort", "default": "area" }, "year": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Year", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 15 }, "place": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place", "default": null }, "period": { "type": "string", "title": "Period", "default": "season" }, "min_hectares": { "type": "number", "title": "Min Hectares", "default": 0 } } }arguments 50 linesactive_incidents unknown never probed
What emergency services (civil protection, ANEPC) are responding to right now in Portugal, closest first. Live occurrences of every kind: fires, road collisions, fallen trees, floods, rescues, with their status (e.g. "Em Curso"), time started and resources on scene. Updated every few minutes. Police-only activity (PSP/GNR) is not published anywhere and is not included. Args: near: a postal code ("4450-208") or municipality ("Matosinhos") to search around; any other text (a parish or village) filters by the incident's location name instead. lat, lon: search around these coordinates (best when the user shares their location). radius_km: search radius around the point (default 10, max 100). kind: "all", "fire", "road", "weather" (trees, floods, wind, landslides) or "rescue". limit: max incidents listed (counts always cover every match). With no place at all, returns the national picture (counts by kind and district, biggest first).
{ "type": "object", "title": "active_incidentsArguments", "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "kind": { "type": "string", "title": "Kind", "default": "all" }, "near": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Near", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 15 }, "radius_km": { "type": "number", "title": "Radius Km", "default": 10 } } }arguments 57 linespower_cuts unknown never probed
Planned power cuts (E-REDES maintenance works) for a postal code, municipality or parish. Args: postal_code: "2795-082" for that street, or "2795" for the whole postal area. municipality: e.g. "Sintra", "Vila Nova de Gaia". parish: e.g. "Algés" (matches part of the parish name). days: how far ahead to look (max 60). With nothing given, returns a national summary by municipality.
{ "type": "object", "title": "power_cutsArguments", "properties": { "days": { "type": "integer", "title": "Days", "default": 14 }, "limit": { "type": "integer", "title": "Limit", "default": 30 }, "parish": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Parish", "default": null }, "postal_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Postal Code", "default": null }, "municipality": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Municipality", "default": null } } }arguments 52 lineslocal_accommodation unknown never probed
Look up the national register of local accommodation (Alojamento Local, RNAL). Answers "is this flat/guesthouse registered?" and "how many AL are on my street?". Args: registration: the RNAL number, e.g. "12345/AL" or "12345". name: part of the registered name, e.g. "InSuites". address: part of the street address, e.g. "Rua de Santa Catarina". postal_code: "1200-290", or "1200" for the whole area. municipality: e.g. "Lisboa", "Porto", "Albufeira". lat, lon: registered accommodation within radius_m metres (max 2000) of a point.
{ "type": "object", "title": "local_accommodationArguments", "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 20 }, "address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Address", "default": null }, "radius_m": { "type": "integer", "title": "Radius M", "default": 200 }, "postal_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Postal Code", "default": null }, "municipality": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Municipality", "default": null }, "registration": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Registration", "default": null } } }arguments 100 linestourism_places unknown never probed
Official tourism places in Portugal, near a point or in a municipality/region. Args: kind: one of blue_flag_beaches, surf_spots, golf, spas, unesco, historic_villages, schist_villages, wine_villages, mountain_villages, marinas, walking_routes, santiago_ways, hotels. place: municipality, parish, district or region name, e.g. "Cascais", "Algarve", "Peniche". name: part of the name, e.g. "Nazaré", "Pestana". lat, lon: closest first, within radius_km (max 200).
{ "type": "object", "title": "tourism_placesArguments", "required": [ "kind" ], "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "kind": { "type": "string", "title": "Kind" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 20 }, "place": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place", "default": null }, "radius_km": { "type": "number", "title": "Radius Km", "default": 25 } } }arguments 71 lineslisbon_events unknown never probed
What's on in Lisbon: the city's official cultural agenda (exhibitions, concerts, theatre, dance, cinema, guided visits, kids, festivals). Args: day: ISO date, e.g. "2026-11-14". Default today. until: ISO date to look at a range from `day` (max 31 days). query: words in the title, venue or description, e.g. "fado", "Gulbenkian", "jazz". category: e.g. "música", "teatro", "exposições", "visitas guiadas", "crianças". free_only: only free events.
{ "type": "object", "title": "lisbon_eventsArguments", "properties": { "day": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Day", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 15 }, "query": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Query", "default": null }, "until": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Until", "default": null }, "category": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Category", "default": null }, "free_only": { "type": "boolean", "title": "Free Only", "default": false } } }arguments 64 lineslisbon_street_works unknown never probed
Street works and public-space occupations in Lisbon: what is (or will be) blocking a street. Two official sources: licensed temporary occupations of public space (filming, events, scaffolding, containers...) and the city's road and pavement works in progress or planned. Args: parish: freguesia, e.g. "Arroios", "Santa Maria Maior", "Belém". street: part of a street name (works only), e.g. "Avenida da República". lat, lon: within radius_m metres of a point (max 3000). day: ISO date the occupation must cover; default today.
{ "type": "object", "title": "lisbon_street_worksArguments", "properties": { "day": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Day", "default": null }, "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 20 }, "parish": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Parish", "default": null }, "street": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Street", "default": null }, "radius_m": { "type": "integer", "title": "Radius M", "default": 400 } } }arguments 76 lineslisbon_recycling unknown never probed
The nearest recycling points in Lisbon of a given kind. Args: lat, lon: where you are. kind: "ecoponto" (paper, plastic, glass), "vidrao" (glass), "papel", "oleo" (used cooking oil), "reee" (small electronics), "alimentar" (food waste), "ecoilha", "ecocentro" (large items). radius_m: search radius in metres (max 3000).
{ "type": "object", "title": "lisbon_recyclingArguments", "required": [ "lat", "lon" ], "properties": { "lat": { "type": "number", "title": "Lat" }, "lon": { "type": "number", "title": "Lon" }, "kind": { "type": "string", "title": "Kind", "default": "ecoponto" }, "limit": { "type": "integer", "title": "Limit", "default": 5 }, "radius_m": { "type": "integer", "title": "Radius M", "default": 500 } } }arguments 33 linespostal_code unknown never probed
Look up a Portuguese postal code (código postal, 'XXXX-XXX' or 'XXXX'). Returns district, municipality, locality and the streets the code covers, plus a central point.
{ "type": "object", "title": "postal_codeArguments", "required": [ "code" ], "properties": { "code": { "type": "string", "title": "Code" } } }arguments 13 linesmunicipality unknown never probed
A municipality (concelho): district, INE code, area, parishes, 2021 census, town-hall contacts.
{ "type": "object", "title": "municipalityArguments", "required": [ "name" ], "properties": { "name": { "type": "string", "title": "Name" } } }arguments 13 linesfuel_prices unknown never probed
Cheapest fuel stations in Portugal for one fuel type, cheapest first (official DGEG prices). Use for "where is diesel/petrol/LPG cheapest in Lisboa / near me / in Braga?". Give an area as a district, a municipality, or a point (lat + lon, with radius_km); with no area it searches all of Portugal. Names are case- and accent-insensitive ("evora" works). Args: fuel_type: A DGEG fuel name or id, e.g. "Gasóleo simples" (regular diesel, 2101), "Gasolina simples 95" (regular 95 petrol, 3201), "Gasolina 98", "GPL Auto" (LPG), or plain words: "diesel", "petrol", "95", "98", "lpg", "cng". See fuel_types() for the full list. district: Portuguese district, e.g. "Lisboa", "Porto", "Faro". municipality: Municipality (concelho), e.g. "Sintra", "Vila Nova de Gaia". Overrides district. lat, lon: A point (WGS84). Results get distance_km and are limited to radius_km. radius_km: Search radius around lat/lon (default 10). brand: Only this brand (substring match), e.g. "Galp", "Prio", "Intermarché". limit: How many stations to return (default 10, max 50). Each station: price_eur (per litre, or per kg/m3 for gas), brand, name, address, municipality, distance_km (with lat/lon), coordinates and last_update (the station's last price update). Also returns how many stations matched and the min/median/max price. Always mention the source (DGEG) and the last_update when quoting prices.
{ "type": "object", "title": "fuel_pricesArguments", "required": [ "fuel_type" ], "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "brand": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Brand", "default": null }, "limit": { "type": "integer", "title": "Limit", "default": 10 }, "district": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "District", "default": null }, "fuel_type": { "type": "string", "title": "Fuel Type" }, "radius_km": { "type": "number", "title": "Radius Km", "default": 10 }, "municipality": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Municipality", "default": null } } }arguments 83 linesfuel_types unknown never probed
List DGEG fuel types (id, name, unit) and the districts accepted by fuel_prices. Only needed when unsure which fuel name to pass; fuel_prices also understands "diesel", "petrol", "95", "98", "lpg".
{ "type": "object", "title": "fuel_typesArguments", "properties": {} }arguments 5 linestransit_operators unknown never probed
Which transport operators have timetables here, and what each one covers.
{ "type": "object", "title": "transit_operatorsArguments", "properties": {} }arguments 5 linesweather_forecast unknown never probed
5-day weather forecast for a place in Portugal (IPMA, official). Args: place: district capital or island town, e.g. "Lisboa", "Porto", "Faro", "Funchal", "Ponta Delgada". lat, lon: use instead of place for anywhere else; the nearest IPMA forecast location is used. Returns daily min/max temperature, rain probability, weather type, wind, and today's UV index.
{ "type": "object", "title": "weather_forecastArguments", "properties": { "lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lat", "default": null }, "lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Lon", "default": null }, "place": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place", "default": null } } }arguments 42 linesweather_warnings unknown never probed
Active IPMA weather warnings (rain, wind, heat, cold, snow, fog, sea, thunderstorms). Args: area: optional district or island group, e.g. "Lisboa", "Madeira", "Açores". Omit for the whole country. include_green: also list green (no-warning) entries. Default false.
{ "type": "object", "title": "weather_warningsArguments", "properties": { "area": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Area", "default": null }, "include_green": { "type": "boolean", "title": "Include Green", "default": false } } }arguments 23 linesfire_risk unknown never probed
Wildfire danger (RCM, risco de incêndio rural) for a municipality, today or tomorrow. Args: municipality: concelho name, e.g. "Sintra", "Monchique". day: 0 = today, 1 = tomorrow. Scale: 1 reduzido, 2 moderado, 3 elevado, 4 muito elevado, 5 máximo.
{ "type": "object", "title": "fire_riskArguments", "required": [ "municipality" ], "properties": { "day": { "type": "integer", "title": "Day", "default": 0 }, "municipality": { "type": "string", "title": "Municipality" } } }arguments 18 lineswhere_is unknown never probed
Which parish, municipality and district a coordinate is in, plus altitude, land use and hazard maps.
{ "type": "object", "title": "where_isArguments", "required": [ "lat", "lon" ], "properties": { "lat": { "type": "number", "title": "Lat" }, "lon": { "type": "number", "title": "Lon" } } }arguments 18 linespublic_holidays unknown never probed
Portugal's national public holidays for a year (default: this year), with weekday. Carnival is listed as optional: it is usually a day off by government decision, not by law. Municipal holidays (one per concelho, e.g. Lisbon 13 June, Porto 24 June) are not included.
{ "type": "object", "title": "public_holidaysArguments", "properties": { "year": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Year", "default": null }, "upcoming_only": { "type": "boolean", "title": "Upcoming Only", "default": false } } }arguments 23 linesmedicine_help unknown never probed
Verified help lines in Portugal for medicine problems: 112, SNS 24, Linha 1400, Infarmed. Use when someone can't find a medicine, needs urgent advice, or asks who to call. Each line has its number, what it is for, hours where published, and the page it was checked on.
{ "type": "object", "title": "where_to_get_helpArguments", "properties": {} }arguments 5 linesfuel_station_detail unknown never probed
Full details of one fuel station: every fuel it sells with price and last update, opening hours, services (car wash, shop, tyre air...) and payment methods. Use after fuel_prices, with a station `id` from its results.
{ "type": "object", "title": "fuel_station_detailArguments", "required": [ "station_id" ], "properties": { "station_id": { "type": "integer", "title": "Station Id" } } }arguments 13 linesev_chargers unknown never probed
Public EV charging sites near a point in Portugal (MOBI.E network), nearest first, with live status and the price the network publishes for each charging point. Use for "where can I charge near X?", "fast chargers near me", "is there a free CCS charger nearby?". Needs coordinates; if the user gives a place name, use known coordinates for it. Covers mainland Portugal, Azores and Madeira. Args: lat, lon: Point to search around (WGS84). radius_km: Search radius (default 5, max 100). min_power_kw: Only points that can deliver at least this power, e.g. 50 for fast DC. connector: "CCS" (CCS2), "Type 2", "CHAdeMO", "CEE", or "DC" / "AC". available_only: Only points whose live status is "available" right now. limit: Max sites to return (default 10, max 50). Each site: operator, address, distance_km, opening hours and its matching points, each with status (available, in use, out of order...), max power, connectors and price (per_kwh / per_minute / per_session in EUR, from the feed). IMPORTANT: these are the charging operator's published fees and may not be the whole bill: see `price_note` and tell the user. `data_freshness` says how old the inventory and live status are. The first call of the day downloads ~220 MB from MOBI.E and can take 1-3 minutes.
{ "type": "object", "title": "ev_chargersArguments", "required": [ "lat", "lon" ], "properties": { "lat": { "type": "number", "title": "Lat" }, "lon": { "type": "number", "title": "Lon" }, "limit": { "type": "integer", "title": "Limit", "default": 10 }, "connector": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Connector", "default": null }, "radius_km": { "type": "number", "title": "Radius Km", "default": 5 }, "min_power_kw": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Min Power Kw", "default": null }, "available_only": { "type": "boolean", "title": "Available Only", "default": false } } }arguments 57 linesbus_next_arrivals unknown never probed
Upcoming buses at a Carris Metropolitana stop, real-time where available. Use for "when is the next bus at X?" (get stop_id from bus_find_stops first). Each arrival says whether it is "realtime" (live GPS estimate) or "scheduled" (timetable only: the bus may not have started its trip yet). minutes_from_now uses the real-time estimate when present. Times are Europe/Lisbon. Only today's operational day is covered, so late at night the list may be short or empty. Args: stop_id: 6-digit stop id, e.g. "060361". line_id: Optional 4-digit line number to keep only that line, e.g. "2794". limit: Max arrivals to return (default 10, max 50).
{ "type": "object", "title": "next_arrivalsArguments", "required": [ "stop_id" ], "properties": { "limit": { "type": "integer", "title": "Limit", "default": 10 }, "line_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Line Id", "default": null }, "stop_id": { "type": "string", "title": "Stop Id" } } }arguments 30 linesbus_line_info unknown never probed
Details of a Carris Metropolitana line: name, route ends, directions, municipalities. Use for "where does line 4715 go?", "which bus goes from Cacilhas to Almada?", or to check whether a line passes a stop (include_stops=True). If `line` is not an exact line number it is treated as text (e.g. "Oriente Setubal") and the matching lines are listed instead. trips_today = 0 means the line does not run today (some lines are seasonal or weekday-only). Departure times past midnight are written "24:30", "25:10" (same service day). Args: line: 4-digit line number ("4715") or free text matched against line names. include_stops: Also list every stop (id + name) in order for each direction.
{ "type": "object", "title": "line_infoArguments", "required": [ "line" ], "properties": { "line": { "type": "string", "title": "Line" }, "include_stops": { "type": "boolean", "title": "Include Stops", "default": false } } }arguments 18 linesbus_vehicle_positions unknown never probed
Live GPS positions of the buses currently running on a Carris Metropolitana line. Use for "where is the 3508 right now?" or to see how many buses are out on a line. Each vehicle includes its position, heading, speed, the stop it is at / heading to, and how many seconds old the fix is. Args: line_id: 4-digit line number, e.g. "3508".
{ "type": "object", "title": "vehicle_positionsArguments", "required": [ "line_id" ], "properties": { "line_id": { "type": "string", "title": "Line Id" } } }arguments 13 lineselectricity_price unknown never probed
Portugal's day-ahead wholesale electricity price (OMIE), per 15-minute period, in €/MWh. Useful for indexed ("dynamic") tariffs: when is electricity cheapest to run the washing machine or charge the car. Not the retail price on a normal bill. Args: day: ISO date, e.g. "2026-11-10". Default: the most recent day OMIE has published. cheapest: also list this many cheapest periods (max 12).
{ "type": "object", "title": "electricity_priceArguments", "properties": { "day": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Day", "default": null }, "cheapest": { "type": "integer", "title": "Cheapest", "default": 4 } } }arguments 23 linesbpstat_search unknown 13h ago
Find Banco de Portugal statistical series by keyword. Examples: "euribor 12 meses", "taxa de juro novos empréstimos habitação", "dólar", "dívida pública", "depósitos particulares", "preços habitação". The search picks the most likely statistical domains (or the one you pass as domain_id) and searches the series inside them; it also lists every domain so you can retry with a specific domain_id. The first search of a domain takes a few seconds to a minute; then it is cached for a week. Args: lang: "PT" or "EN" (labels are richer in PT).
{ "type": "object", "title": "bpstat_searchArguments", "required": [ "query" ], "properties": { "lang": { "type": "string", "title": "Lang", "default": "PT" }, "limit": { "type": "integer", "title": "Limit", "default": 15 }, "query": { "type": "string", "title": "Query" }, "domain_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Domain Id", "default": null } } }arguments 35 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's ide1760c74ea0c471e.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/e1760c74ea0c471e/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/e1760c74ea0c471e?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.