TerraLab
Map data ready for QGIS: open data extracts, GIS files, coordinates, elevation, French parcels.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"terralab": {
"url": "https://mcp.terra-lab.ai/mcp"
}
}
}Puntos de conexión remotos
https://mcp.terra-lab.ai/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (6)
🟢find_places(query, latitude, longitude, limit, addresses, ...)
Use this when the user asks to put, pin or plot places or addresses on an interactive map with their coordinates, wants the coordinates of an address or place name, the address at given coordinates, or a whole list of addresses (up to 100, pasted or as CSV with an address column) placed on a map. Worldwide, OpenStreetMap data; French street addresses are refined with the national address base. Shows the points on a map; for a list, gives a CSV with latitude and longitude added (opens directly in QGIS as a delimited text layer), plus KML and GeoJSON. Not for weather, opening hours, reviews, driving or travel directions and times, property prices, or general knowledge about a place (history, facts, travel advice): answer those without this tool. Never use the user's current location unless they type it. Download links build their file when opened; no file is saved. Never pass these links to open_gis_file.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "One address or place name. The place the user asks about, not the user's own location.",
"examples": [
"12 rue de la Paix, Annecy",
"Eiffel Tower, Paris"
]
},
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "Latitude for a reverse lookup. The place the user asks about, not the user's own location.",
"examples": [
45.8992
]
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "Longitude for a reverse lookup. The place the user asks about, not the user's own location.",
"examples": [
6.1294
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 5,
"description": "For a single query: maximum number of matches."
},
"addresses": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 100,
"description": "A list of addresses to place, up to 100. The place the user asks about, not the user's own location.",
"examples": [
[
"10 rue de Rivoli, Paris",
"350 Fifth Avenue, New York"
]
]
},
"text": {
"type": "string",
"description": "A list as text: one address per line, or CSV with an address column. The place the user asks about, not the user's own location."
},
"title": {
"type": "string",
"description": "For a list: map title, also used for file names.",
"examples": [
"Store visits"
]
}
},
"examples": [
{
"query": "12 rue de la Paix, Annecy"
},
{
"latitude": 48.8584,
"longitude": 2.2945
},
{
"addresses": [
"10 rue de Rivoli, Paris",
"Empire State Building, New York"
],
"title": "Visits"
}
]
}Esquema de salida
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"description": "Data sources and licences of the result.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
},
"downloads": {
"type": "array",
"description": "Download links; each builds its file when opened.",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"format": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"totalFound": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"code": {
"type": "string",
"description": "Error code, on errors only."
},
"message": {
"type": "string",
"description": "Error message, on errors only."
},
"hint": {
"type": "string",
"description": "What to do next, on errors only."
}
},
"additionalProperties": true
}🟢convert_coordinates(text, target_epsg, source_epsg)
Use this when the user gives coordinates in any common format (decimal degrees, degrees minutes seconds, UTM, MGRS, Lambert 93, "lat, lon" or "lon, lat") and wants them in another format or projection. The format of each line is detected automatically; for a national grid the numbers alone cannot reveal (Dutch RD, Swiss LV95, British National Grid, Polish 1992, Belgian Lambert 72) or a UTM zone given apart from the numbers, set source_epsg. Converts up to 1,000 lines to decimal degrees, DMS, UTM and MGRS (1 m), and optionally to an EPSG code. Also recommends the local projected CRS for working in QGIS. Returns a CSV and a GeoJSON download (both open directly in QGIS) and a map. Needs actual coordinates: to explain what a CRS, a projection or an EPSG code is, answer without this tool. Download links build their file when opened; no file is saved. Never pass these links to open_gis_file.
Esquema de entrada
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "One coordinate per line, up to 1,000 lines. A label may follow the numbers.",
"examples": [
"48.8584, 2.2945 Eiffel Tower",
"45°53'57\"N 6°07'46\"E",
"31U 448252 5411955",
"32T KR 77322 86855"
]
},
"target_epsg": {
"type": "string",
"description": "Optional extra output system as an EPSG code.",
"examples": [
"EPSG:2154",
"EPSG:3857"
]
},
"source_epsg": {
"type": "string",
"description": "Optional system the input is in, as an EPSG code, when it cannot be detected: Dutch RD EPSG:28992, Swiss LV95 EPSG:2056, British National Grid EPSG:27700, Poland 1992 EPSG:2180, UTM zone 32N EPSG:32632, ETRS89 or ED50 UTM EPSG:25830 / EPSG:23030. Leave out to detect each line.",
"examples": [
"EPSG:28992",
"EPSG:32632"
]
}
},
"required": [
"text"
],
"examples": [
{
"text": "48.8584, 2.2945\n45.8992 N 6.1294 E",
"target_epsg": "EPSG:2154"
}
]
}Esquema de salida
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"description": "Data sources and licences of the result.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
},
"downloads": {
"type": "array",
"description": "Download links; each builds its file when opened.",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"format": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"totalFound": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"code": {
"type": "string",
"description": "Error code, on errors only."
},
"message": {
"type": "string",
"description": "Error message, on errors only."
},
"hint": {
"type": "string",
"description": "What to do next, on errors only."
}
},
"additionalProperties": true
}🟢get_elevation(mode, points, samples, area, interval_m)
Use this when the user wants the altitude of places, an elevation profile (cross-section) between two or more points (min, max, total ascent and descent), or the terrain of an area: contour lines (topographic lines) and slope statistics (how steep or flat it is). mode "point": up to 100 points. mode "path": 2 or more points, sampled into at most 500 samples, with a profile chart. mode "area": a bbox or a place with a radius, up to about 10 x 10 km, with interval_m between lines; one area call answers how steep a site is. Data: Copernicus DEM, a 30 m surface model worldwide. Contours download as Shapefile, GeoJSON or KML, which open directly in QGIS. Needs a place, coordinates or an area: to explain what a DEM, a DSM or contour lines are, answer without this tool. Never use the user's current location unless they type it. Give the place as the user names it (place name, address or coordinates): this tool locates it, so find_places is not needed first. Download links build their file when opened; no file is saved. Never pass these links to open_gis_file.
Esquema de entrada
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"point",
"path",
"area"
],
"default": "point",
"description": "point: elevation of each point; path: profile along the points; area: contour lines and slope statistics."
},
"points": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"examples": [
"Annecy, France"
]
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"name": {
"type": "string"
}
},
"required": [
"latitude",
"longitude"
]
}
]
},
"minItems": 1,
"maxItems": 100,
"description": "For point and path: points or place names. The place the user asks about, not the user's own location."
},
"samples": {
"type": "integer",
"minimum": 10,
"maximum": 500,
"default": 200,
"description": "For path: number of samples along the path."
},
"area": {
"type": "object",
"description": "For area: The area: a bbox, or a place (name, address or coordinates) with an optional radius in metres. The place the user asks about, not the user's own location.",
"properties": {
"bbox": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 4,
"maxItems": 4,
"description": "[west, south, east, north] in decimal degrees (WGS 84).",
"examples": [
[
6.12,
45.89,
6.14,
45.91
]
]
},
"place": {
"description": "A place name or address, or a point.",
"anyOf": [
{
"type": "string",
"examples": [
"Annecy, France"
]
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
]
},
"radius_m": {
"type": "number",
"minimum": 1,
"maximum": 100000,
"description": "Radius around the place in metres.",
"examples": [
1000
]
}
},
"examples": [
{
"place": "Lyon Part-Dieu",
"radius_m": 1000
},
{
"bbox": [
2.34,
48.856,
2.35,
48.862
]
}
]
},
"interval_m": {
"type": "number",
"minimum": 1,
"maximum": 1000,
"default": 20,
"description": "For area: vertical interval between contour lines, in metres.",
"examples": [
10,
20,
50
]
}
},
"examples": [
{
"mode": "point",
"points": [
"Annecy, France"
]
},
{
"mode": "path",
"points": [
"Chamonix, France",
{
"latitude": 45.8786,
"longitude": 6.8873,
"name": "Aiguille du Midi"
}
]
},
{
"mode": "area",
"area": {
"place": "Chamonix, France",
"radius_m": 2000
},
"interval_m": 50
}
]
}Esquema de salida
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"description": "Data sources and licences of the result.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
},
"downloads": {
"type": "array",
"description": "Download links; each builds its file when opened.",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"format": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"totalFound": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"code": {
"type": "string",
"description": "Error code, on errors only."
},
"message": {
"type": "string",
"description": "Error message, on errors only."
},
"hint": {
"type": "string",
"description": "What to do next, on errors only."
}
},
"additionalProperties": true
}🟢extract_open_data(theme, area, formats, kind)
Use this when the user wants open geographic data for an area anywhere in the world: buildings, places, roads, addresses, administrative divisions, land use, points of interest, waterways, water areas, power lines, boundaries, railways, routes, transit stops or protected areas. The area is a bbox, a place, or a place with a radius. Returns the count, sample attributes, a map and a file (GeoJSON, KML, Shapefile zip or CSV) with its licence. One extract holds at most 20,000 features: for a town centre use a radius of about 1 km, for dense cities less. For one kind of place (pharmacies, schools, supermarkets) or land (forest, vineyards), set kind. One theme per call: extract the layers the user asks for; when they ask what data exists for a project, name the useful themes and let them choose before extracting several. Data: Overture Maps and OpenStreetMap. Never use the user's current location unless they type it. Give the place as the user names it (place name, address or coordinates): this tool locates it, so find_places is not needed first. Download links build their file when opened; no file is saved. Never pass these links to open_gis_file: list every format the user needs in formats, in this one call.
Esquema de entrada
{
"type": "object",
"properties": {
"theme": {
"type": "string",
"enum": [
"buildings",
"places",
"roads",
"addresses",
"divisions",
"landuse",
"pois",
"waterways",
"water_areas",
"power",
"boundaries",
"railways",
"routes",
"transit_stops",
"protected_areas"
],
"description": "The data layer."
},
"area": {
"type": "object",
"description": "The area: a bbox, or a place (name, address or coordinates) with an optional radius in metres. The place the user asks about, not the user's own location.",
"properties": {
"bbox": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 4,
"maxItems": 4,
"description": "[west, south, east, north] in decimal degrees (WGS 84).",
"examples": [
[
6.12,
45.89,
6.14,
45.91
]
]
},
"place": {
"description": "A place name or address, or a point.",
"anyOf": [
{
"type": "string",
"examples": [
"Annecy, France"
]
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
]
}
]
},
"radius_m": {
"type": "number",
"minimum": 1,
"maximum": 100000,
"description": "Radius around the place in metres.",
"examples": [
1000
]
}
},
"examples": [
{
"place": "Lyon Part-Dieu",
"radius_m": 1000
},
{
"bbox": [
2.34,
48.856,
2.35,
48.862
]
}
]
},
"formats": {
"type": "array",
"items": {
"type": "string",
"enum": [
"geojson",
"kml",
"shapefile",
"csv"
]
},
"default": [
"geojson"
],
"description": "Download formats."
},
"kind": {
"description": "Keep only some kinds of feature, matched against their OpenStreetMap tag value in English: pharmacy, school, supermarket, restaurant, hospital, farmland, forest, vineyard. One kind, or several in one call ([\"forest\", \"meadow\", \"grass\"]). Leave out for all of the theme.",
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10
}
]
}
},
"required": [
"theme",
"area"
],
"examples": [
{
"theme": "buildings",
"area": {
"bbox": [
2.34,
48.857,
2.343,
48.859
]
},
"formats": [
"shapefile"
]
},
{
"theme": "pois",
"area": {
"place": "Annecy",
"radius_m": 500
},
"kind": "pharmacy"
}
]
}Esquema de salida
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"description": "Data sources and licences of the result.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
},
"downloads": {
"type": "array",
"description": "Download links; each builds its file when opened.",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"format": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"totalFound": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"code": {
"type": "string",
"description": "Error code, on errors only."
},
"message": {
"type": "string",
"description": "Error message, on errors only."
},
"hint": {
"type": "string",
"description": "What to do next, on errors only."
}
},
"additionalProperties": true
}🟢open_gis_file(file, url, text, points, geojson, ...)
Use this when the user shares or links a geographic file (GeoJSON, KML, KMZ, GPX, zipped Shapefile, CSV with coordinates, WKT), pastes its content, or has a list of points or GeoJSON to put on a map, and wants to see it, understand it (format, coordinate system, extent, feature count, geometry types, fields, problems) or convert it to GeoJSON, KML, KMZ, GPX, Shapefile zip or CSV. Shapefile, GeoJSON, KML and CSV outputs open directly in QGIS. Also covers long tracks or point lists too big to write in the chat. Files up to 50 MB. Never use the user's current location unless they type it. Download links build their file when opened; no file is saved. TerraLab reads the file or link to answer and keeps no copy.
Esquema de entrada
{
"type": "object",
"properties": {
"file": {
"type": "object",
"description": "A file uploaded in the conversation.",
"properties": {
"download_url": {
"type": "string"
},
"file_id": {
"type": "string"
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
}
},
"required": [
"download_url",
"file_id"
]
},
"url": {
"type": "string",
"description": "A public http(s) link to the file.",
"examples": [
"https://example.com/trail.gpx"
]
},
"text": {
"type": "string",
"description": "The file content pasted as text (GeoJSON, KML, GPX, CSV or WKT)."
},
"points": {
"type": "array",
"maxItems": 5000,
"description": "Points to show and convert, with a name. The places the user asks about, not the user's own location.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"description": {
"type": "string"
}
},
"required": [
"latitude",
"longitude"
]
},
"examples": [
[
{
"name": "Annecy station",
"latitude": 45.9017,
"longitude": 6.1217
}
]
]
},
"geojson": {
"type": "object",
"description": "A GeoJSON FeatureCollection, Feature or geometry in WGS 84, given as an object."
},
"title": {
"type": "string",
"description": "Name for the map and the output files when there is no file name.",
"examples": [
"Client sites"
]
},
"file_name": {
"type": "string",
"description": "Optional name of the file, used to name the outputs.",
"examples": [
"trail.gpx"
]
},
"convert_to": {
"type": "array",
"items": {
"type": "string",
"enum": [
"geojson",
"kml",
"kmz",
"gpx",
"shapefile",
"csv"
]
},
"description": "Output formats wanted.",
"examples": [
[
"gpx"
],
[
"kml",
"shapefile"
]
]
}
},
"examples": [
{
"text": "<kml xmlns=\"http://www.opengis.net/kml/2.2\"><Placemark><name>A</name><Point><coordinates>6.12,45.9</coordinates></Point></Placemark></kml>",
"convert_to": [
"gpx"
]
}
]
}Esquema de salida
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"description": "Data sources and licences of the result.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
},
"downloads": {
"type": "array",
"description": "Download links; each builds its file when opened.",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"format": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"totalFound": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"code": {
"type": "string",
"description": "Error code, on errors only."
},
"message": {
"type": "string",
"description": "Error message, on errors only."
},
"hint": {
"type": "string",
"description": "What to do next, on errors only."
}
},
"additionalProperties": true
}🟢french_parcel(address, latitude, longitude)
Use this when the user asks about the cadastral parcel (parcelle cadastrale) at an address or point in France: parcel id, commune, section, number, cadastral area, and the local urban plan zone (PLU or PLUi zone: label, type, document). Shows the parcel on a map with GeoJSON and KML downloads. France only. Never returns owners or property sales. Never use the user's current location unless they type it. Give the place as the user names it (place name, address or coordinates): this tool locates it, so find_places is not needed first. Download links build their file when opened; no file is saved. Never pass these links to open_gis_file.
Esquema de entrada
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "An address in France. The place the user asks about, not the user's own location.",
"examples": [
"12 rue de la Paix, Annecy"
]
},
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "Latitude in France. The place the user asks about, not the user's own location.",
"examples": [
45.903488
]
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "Longitude in France. The place the user asks about, not the user's own location.",
"examples": [
6.126959
]
}
},
"examples": [
{
"address": "12 rue de la Paix, Annecy"
},
{
"latitude": 48.8566,
"longitude": 2.3522
}
]
}Esquema de salida
{
"type": "object",
"properties": {
"sources": {
"type": "array",
"description": "Data sources and licences of the result.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"licence": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
},
"downloads": {
"type": "array",
"description": "Download links; each builds its file when opened.",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"format": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"totalFound": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"code": {
"type": "string",
"description": "Error code, on errors only."
},
"message": {
"type": "string",
"description": "Error message, on errors only."
},
"hint": {
"type": "string",
"description": "What to do next, on errors only."
}
},
"additionalProperties": true
}Comunidad
Evidencia