Open data: clinical trials, EU tenders, companies, fuel prices
Official open data as JSON: clinical trials, EU tenders, papers, apps, French firms, fuel, domains.
我該用這個嗎
品質與安全性
發現項目(15)
- HIGH
- MEDIUM在 app-store-search 中
- MEDIUM在 clinical-trials-monitor 中
- MEDIUM在 domain-availability 中
- MEDIUM在 eu-fuel-monitor 中
- MEDIUM在 fr-company-search 中
- MEDIUM在 scholarly-search 中
- MEDIUM在 ted-tender-monitor 中
- LOW在 app-store-search 中
- LOW在 clinical-trials-monitor 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"open-data": {
"url": "https://api.gregswarm.duckdns.org/mcp"
}
}
}遠端端點
https://api.gregswarm.duckdns.org/mcpstreamable-http它能做什麼
工具清單
工具(7)
🟢app-store-search(term, country, limit)
Search Apple's App Store by keyword in any storefront country and get each app's developer, price, rating, version, release date, genre, size, minimum OS and store URL. Read from itunes.apple.com when called. Each result: app_id, name, developer, developer_id, bundle_id, price, formatted_price, currency, average_rating, rating_count, average_rating_current_version, rating_count_current_version, version, version_release_date, release_date, primary_genre, size_bytes, minimum_os, content_rating, seller_name, store_url. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.
輸入結構描述
{
"type": "object",
"properties": {
"term": {
"type": "string",
"description": "Keyword to search for in the App Store (for example budget, photo editor, meditation). Example: \"budget\"."
},
"country": {
"type": "string",
"enum": [
"us",
"gb",
"ca",
"au",
"nz",
"ie",
"fr",
"de",
"es",
"it",
"pt",
"nl",
"be",
"at",
"ch",
"se",
"no",
"dk",
"fi",
"pl",
"cz",
"tr",
"gr",
"jp",
"kr",
"cn",
"hk",
"tw",
"sg",
"in",
"id",
"th",
"vn",
"ph",
"my",
"br",
"mx",
"ar",
"cl",
"co",
"za",
"ae",
"sa",
"il",
"eg",
"ng",
"ua",
"ro",
"hu"
],
"description": "Two-letter App Store country code, which sets the prices, currency and ratings returned. Example: \"us\"."
},
"limit": {
"type": "integer",
"description": "How many apps to return (Apple allows up to 200 per search). Example: 50."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"product": {
"type": "string"
},
"count": {
"type": "integer",
"description": "how many results came back"
},
"items": {
"type": "array",
"description": "the results, one object each",
"items": {
"type": "object",
"properties": {
"app_id": {
"description": "app_id (id)"
},
"name": {
"description": "name (text)"
},
"developer": {
"description": "developer (text)"
},
"developer_id": {
"description": "developer_id (id)"
},
"bundle_id": {
"description": "bundle_id (text)"
},
"price": {
"description": "price (price)"
},
"formatted_price": {
"description": "formatted_price (text)"
},
"currency": {
"description": "currency (currency)"
},
"average_rating": {
"description": "average_rating (number)"
},
"rating_count": {
"description": "rating_count (integer)"
},
"average_rating_current_version": {
"description": "average_rating_current_version (number)"
},
"rating_count_current_version": {
"description": "rating_count_current_version (integer)"
},
"version": {
"description": "version (text)"
},
"version_release_date": {
"description": "version_release_date (datetime)"
},
"release_date": {
"description": "release_date (datetime)"
},
"primary_genre": {
"description": "primary_genre (text)"
},
"size_bytes": {
"description": "size_bytes (integer)"
},
"minimum_os": {
"description": "minimum_os (text)"
},
"content_rating": {
"description": "content_rating (text)"
},
"seller_name": {
"description": "seller_name (text)"
},
"store_url": {
"description": "store_url (url)"
}
}
}
},
"fetched_at": {
"type": "integer",
"description": "when the source was read (Unix seconds)"
},
"partial": {
"type": "boolean",
"description": "some of the source's requests failed: the results are incomplete"
},
"truncated_from": {
"type": "integer",
"description": "the answer was cut to fit: this many results came back in all"
},
"sources": {
"type": "array",
"description": "where the data came from: each source's name, licence and the attribution to show with it",
"items": {
"type": "object"
}
}
},
"required": [
"count",
"items"
]
}🟢clinical-trials-monitor(condition, phase, status, updated_since, limit)
Studies from the official ClinicalTrials.gov API v2 for a condition, phase and status, returning only the studies whose status, phase, enrollment or last update changed since your last run. Read from clinicaltrials.gov when called. Each result: nct_id, title, sponsor, phase, status, enrollment, start_date, completion_date, last_update_date, conditions, lead_intervention, first_country. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.
輸入結構描述
{
"type": "object",
"properties": {
"condition": {
"type": "string",
"description": "Disease or condition to follow (for example breast cancer, type 2 diabetes, Alzheimer). Example: \"breast cancer\"."
},
"phase": {
"type": "string",
"enum": [
"EARLY_PHASE1",
"PHASE1",
"PHASE2",
"PHASE3",
"PHASE4"
],
"description": "Study phase to follow. Example: \"PHASE2\"."
},
"status": {
"type": "string",
"enum": [
"RECRUITING",
"NOT_YET_RECRUITING",
"ACTIVE_NOT_RECRUITING",
"ENROLLING_BY_INVITATION",
"COMPLETED",
"TERMINATED",
"WITHDRAWN",
"SUSPENDED"
],
"description": "Recruitment status to follow. Example: \"RECRUITING\"."
},
"updated_since": {
"type": "string",
"description": "Only studies whose record was last updated on or after this date (YYYY-MM-DD). Example: \"2025-01-01\"."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "At most this many results (default 100)."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"product": {
"type": "string"
},
"count": {
"type": "integer",
"description": "how many results came back"
},
"items": {
"type": "array",
"description": "the results, one object each",
"items": {
"type": "object",
"properties": {
"nct_id": {
"description": "nct_id (id)"
},
"title": {
"description": "title (text)"
},
"sponsor": {
"description": "sponsor (text)"
},
"phase": {
"description": "phase (list)"
},
"status": {
"description": "status (text)"
},
"enrollment": {
"description": "enrollment (integer)"
},
"start_date": {
"description": "start_date (date)"
},
"completion_date": {
"description": "completion_date (date)"
},
"last_update_date": {
"description": "last_update_date (date)"
},
"conditions": {
"description": "conditions (list)"
},
"lead_intervention": {
"description": "lead_intervention (text)"
},
"first_country": {
"description": "first_country (text)"
}
}
}
},
"fetched_at": {
"type": "integer",
"description": "when the source was read (Unix seconds)"
},
"partial": {
"type": "boolean",
"description": "some of the source's requests failed: the results are incomplete"
},
"truncated_from": {
"type": "integer",
"description": "the answer was cut to fit: this many results came back in all"
},
"sources": {
"type": "array",
"description": "where the data came from: each source's name, licence and the attribution to show with it",
"items": {
"type": "object"
}
}
},
"required": [
"count",
"items"
]
}🟢domain-availability(domains, limit)
Check a list of .com domains in bulk and get the registrar, creation and expiry dates, status codes and nameservers straight from the Verisign registry's public RDAP service. Read from rdap.verisign.com when called. Each result: domain, registered, registrar_id, registrar_name, created_at, expires_at, status, nameserver_1, nameserver_2. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.
輸入結構描述
{
"type": "object",
"properties": {
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Registered .com domain names to look up, e.g. [\"example.com\", \"google.com\"]. A name the registry does not know (available) returns a 404 and no row. Example: [\"example.com\", \"google.com\", \"apify.com\"]."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "At most this many results (default 100)."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"product": {
"type": "string"
},
"count": {
"type": "integer",
"description": "how many results came back"
},
"items": {
"type": "array",
"description": "the results, one object each",
"items": {
"type": "object",
"properties": {
"domain": {
"description": "domain (text)"
},
"registered": {
"description": "registered (bool)"
},
"registrar_id": {
"description": "registrar_id (id)"
},
"registrar_name": {
"description": "registrar_name (text)"
},
"created_at": {
"description": "created_at (datetime)"
},
"expires_at": {
"description": "expires_at (datetime)"
},
"status": {
"description": "status (list)"
},
"nameserver_1": {
"description": "nameserver_1 (text)"
},
"nameserver_2": {
"description": "nameserver_2 (text)"
}
}
}
},
"fetched_at": {
"type": "integer",
"description": "when the source was read (Unix seconds)"
},
"partial": {
"type": "boolean",
"description": "some of the source's requests failed: the results are incomplete"
},
"truncated_from": {
"type": "integer",
"description": "the answer was cut to fit: this many results came back in all"
},
"sources": {
"type": "array",
"description": "where the data came from: each source's name, licence and the attribution to show with it",
"items": {
"type": "object"
}
}
},
"required": [
"count",
"items"
]
}🟢eu-fuel-monitor(country, postcode, limit)
Each run returns only the stations whose fuel prices changed since the last run, from the French and Spanish open government feeds, filtered by postcode prefix. Read from donnees.roulez-eco.fr, sedeaplicaciones.minetur.gob.es when called. Each result: country, station_id, postcode, address, city, lat, lon, diesel_eur_l, sp95_e5_eur_l, e10_eur_l, sp98_eur_l. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.
輸入結構描述
{
"type": "object",
"properties": {
"country": {
"type": "array",
"items": {
"type": "string",
"enum": [
"FR",
"ES"
]
},
"description": "Which national feeds to read (empty: all). Example: [\"FR\", \"ES\"]."
},
"postcode": {
"type": "string",
"description": "Keep stations whose postcode starts with this (28 is Madrid in Spain, Eure-et-Loir in France; 75 Paris; empty keeps all). Example: \"28\"."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "At most this many results (default 100)."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"product": {
"type": "string"
},
"count": {
"type": "integer",
"description": "how many results came back"
},
"items": {
"type": "array",
"description": "the results, one object each",
"items": {
"type": "object",
"properties": {
"country": {
"description": "country (country)"
},
"station_id": {
"description": "station_id (id)"
},
"postcode": {
"description": "postcode (id)"
},
"address": {
"description": "address (text)"
},
"city": {
"description": "city (text)"
},
"lat": {
"description": "lat (lat)"
},
"lon": {
"description": "lon (lon)"
},
"diesel_eur_l": {
"description": "diesel_eur_l (price)"
},
"sp95_e5_eur_l": {
"description": "sp95_e5_eur_l (price)"
},
"e10_eur_l": {
"description": "e10_eur_l (price)"
},
"sp98_eur_l": {
"description": "sp98_eur_l (price)"
}
}
}
},
"fetched_at": {
"type": "integer",
"description": "when the source was read (Unix seconds)"
},
"partial": {
"type": "boolean",
"description": "some of the source's requests failed: the results are incomplete"
},
"truncated_from": {
"type": "integer",
"description": "the answer was cut to fit: this many results came back in all"
},
"sources": {
"type": "array",
"description": "where the data came from: each source's name, licence and the attribution to show with it",
"items": {
"type": "object"
}
}
},
"required": [
"count",
"items"
]
}🟢fr-company-search(activite_principale, departement, tranche_effectif_salarie, etat_administratif, limit)
Search France's official company register by NAF activity code, département, headcount band and status, and get typed legal-entity records with head-office address, coordinates and company size. Read from recherche-entreprises.api.gouv.fr when called. Each result: siren, siret_head_office, name, legal_name, naf_code, legal_form_code, address, postcode, city, departement, lat, lon, creation_date, headcount_band, company_category, establishments_total, establishments_open, status. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.
輸入結構描述
{
"type": "object",
"properties": {
"activite_principale": {
"type": "string",
"description": "Main activity code (NAF rev. 2) of the company, e.g. 62.01Z (computer programming), 56.10A (restaurants), 47.11D (supermarkets). Example: \"62.01Z\"."
},
"departement": {
"type": "string",
"description": "Département code of the head office, e.g. 75 Paris, 69 Rhône, 2A Corse-du-Sud. Leave empty for all of France. Example: \"75\"."
},
"tranche_effectif_salarie": {
"type": "string",
"description": "INSEE headcount band: 00 (0), 01 (1-2), 02 (3-5), 03 (6-9), 11 (10-19), 12 (20-49), 21 (50-99), 22 (100-199), 31 (200-249), 32 (250-499), 41 (500-999), 42 (1000-1999), 51 (2000-4999), 52 (5000-9999), 53 (10000+). Leave empty for any. Example: \"11\"."
},
"etat_administratif": {
"type": "string",
"enum": [
"A",
"C"
],
"description": "A = active companies, C = ceased companies. Example: \"A\"."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "At most this many results (default 100)."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"product": {
"type": "string"
},
"count": {
"type": "integer",
"description": "how many results came back"
},
"items": {
"type": "array",
"description": "the results, one object each",
"items": {
"type": "object",
"properties": {
"siren": {
"description": "siren (id)"
},
"siret_head_office": {
"description": "siret_head_office (id)"
},
"name": {
"description": "name (text)"
},
"legal_name": {
"description": "legal_name (text)"
},
"naf_code": {
"description": "naf_code (id)"
},
"legal_form_code": {
"description": "legal_form_code (id)"
},
"address": {
"description": "address (text)"
},
"postcode": {
"description": "postcode (id)"
},
"city": {
"description": "city (text)"
},
"departement": {
"description": "departement (id)"
},
"lat": {
"description": "lat (lat)"
},
"lon": {
"description": "lon (lon)"
},
"creation_date": {
"description": "creation_date (date)"
},
"headcount_band": {
"description": "headcount_band (id)"
},
"company_category": {
"description": "company_category (text)"
},
"establishments_total": {
"description": "establishments_total (integer)"
},
"establishments_open": {
"description": "establishments_open (integer)"
},
"status": {
"description": "status (id)"
}
}
}
},
"fetched_at": {
"type": "integer",
"description": "when the source was read (Unix seconds)"
},
"partial": {
"type": "boolean",
"description": "some of the source's requests failed: the results are incomplete"
},
"truncated_from": {
"type": "integer",
"description": "the answer was cut to fit: this many results came back in all"
},
"sources": {
"type": "array",
"description": "where the data came from: each source's name, licence and the attribution to show with it",
"items": {
"type": "object"
}
}
},
"required": [
"count",
"items"
]
}🟢scholarly-search(query, year_from, year_to, oa_status, limit)
Search the OpenAlex index of scholarly works by keyword, year range and open-access status, and get each paper's title, DOI, year, venue, type, citation count and open-access link. Read from api.openalex.org when called. Each result: openalex_id, title, doi, year, publication_date, venue, type, cited_by_count, is_open_access, oa_status, open_access_url, language. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.
輸入結構描述
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Keywords to search for in titles, abstracts and full text. Example: \"graph neural networks\"."
},
"year_from": {
"type": "integer",
"description": "First publication year to include. Example: 2020."
},
"year_to": {
"type": "integer",
"description": "Last publication year to include. Example: 2026."
},
"oa_status": {
"type": "string",
"enum": [
"",
"gold",
"green",
"hybrid",
"bronze",
"diamond",
"closed"
],
"description": "Keep only works with this open-access status (empty: all works). Example: \"green\"."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "At most this many results (default 100)."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"product": {
"type": "string"
},
"count": {
"type": "integer",
"description": "how many results came back"
},
"items": {
"type": "array",
"description": "the results, one object each",
"items": {
"type": "object",
"properties": {
"openalex_id": {
"description": "openalex_id (url)"
},
"title": {
"description": "title (text)"
},
"doi": {
"description": "doi (text)"
},
"year": {
"description": "year (integer)"
},
"publication_date": {
"description": "publication_date (date)"
},
"venue": {
"description": "venue (text)"
},
"type": {
"description": "type (text)"
},
"cited_by_count": {
"description": "cited_by_count (integer)"
},
"is_open_access": {
"description": "is_open_access (bool)"
},
"oa_status": {
"description": "oa_status (text)"
},
"open_access_url": {
"description": "open_access_url (url)"
},
"language": {
"description": "language (text)"
}
}
}
},
"fetched_at": {
"type": "integer",
"description": "when the source was read (Unix seconds)"
},
"partial": {
"type": "boolean",
"description": "some of the source's requests failed: the results are incomplete"
},
"truncated_from": {
"type": "integer",
"description": "the answer was cut to fit: this many results came back in all"
},
"sources": {
"type": "array",
"description": "where the data came from: each source's name, licence and the attribution to show with it",
"items": {
"type": "object"
}
}
},
"required": [
"count",
"items"
]
}🟢ted-tender-monitor(cpv_prefix, country, keyword, published_since, limit)
New public procurement notices from the EU's official TED search API for a CPV code prefix, buyer country and keyword, returning only the notices that are new or changed since your last run. Read from api.ted.europa.eu when called. Each result: notice_id, publication_date, buyer, country_code, title, cpv_codes, procedure, deadline, estimated_value, currency, url. Needs a RapidAPI key for this API (https://rapidapi.com/IanGregory/api/clinical-trials-eu-tenders-open-data-api), sent as the X-RapidAPI-Key header; the free plan has 50 requests a month.
輸入結構描述
{
"type": "object",
"properties": {
"cpv_prefix": {
"type": "string",
"description": "Start of the CPV code to follow (for example 72 for IT services, 45 for construction, 33 for medical equipment). Example: \"72\"."
},
"country": {
"type": "string",
"enum": [
"AUT",
"BEL",
"BGR",
"HRV",
"CYP",
"CZE",
"DNK",
"EST",
"FIN",
"FRA",
"DEU",
"GRC",
"HUN",
"IRL",
"ITA",
"LVA",
"LTU",
"LUX",
"MLT",
"NLD",
"POL",
"PRT",
"ROU",
"SVK",
"SVN",
"ESP",
"SWE",
"NOR",
"ISL"
],
"description": "Country of the buying organisation, as a three-letter ISO code. Example: \"FRA\"."
},
"keyword": {
"type": "string",
"description": "Optional word that the notice title must contain. Leave empty to keep all notices. Example: \"services\"."
},
"published_since": {
"type": "string",
"description": "Only notices published on or after this date, written YYYYMMDD. Example: \"20250101\"."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "At most this many results (default 100)."
}
},
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"product": {
"type": "string"
},
"count": {
"type": "integer",
"description": "how many results came back"
},
"items": {
"type": "array",
"description": "the results, one object each",
"items": {
"type": "object",
"properties": {
"notice_id": {
"description": "notice_id (id)"
},
"publication_date": {
"description": "publication_date (date)"
},
"buyer": {
"description": "buyer (text)"
},
"country_code": {
"description": "country_code (text)"
},
"title": {
"description": "title (text)"
},
"cpv_codes": {
"description": "cpv_codes (list)"
},
"procedure": {
"description": "procedure (text)"
},
"deadline": {
"description": "deadline (date)"
},
"estimated_value": {
"description": "estimated_value (number)"
},
"currency": {
"description": "currency (text)"
},
"url": {
"description": "url (url)"
}
}
}
},
"fetched_at": {
"type": "integer",
"description": "when the source was read (Unix seconds)"
},
"partial": {
"type": "boolean",
"description": "some of the source's requests failed: the results are incomplete"
},
"truncated_from": {
"type": "integer",
"description": "the answer was cut to fit: this many results came back in all"
},
"sources": {
"type": "array",
"description": "where the data came from: each source's name, licence and the attribution to show with it",
"items": {
"type": "object"
}
}
},
"required": [
"count",
"items"
]
}社群
證據