# MCP tool: layer

Jedna kategoria danych o działce

## Description (verbatim)

Pobierz wskazaną kategorię danych na podstawie q, id albo point. Odczytuj łącznie coverage, source, as_of i note. Opłaty za not_covered i not_computed są zwracane; covered_no_data oznacza brak rekordu potwierdzony przez źródło. Nie wnioskuj o braku obiektu ani o statusie prawnym z niedostępnych danych.

## Cost and binding

`x-request-cost`: 1 request per call.

REST binding: [GET /v1/layer/{layer}](../operations/layer.md).

## Inputs

Dokładnie jeden z parametrów q, id, point (lat i lng razem liczą się jako point). Wszystkie punkty odczytu API i wszystkie narzędzia obsługują te trzy warianty.

| Field | Required | Schema / constraints | Description |
| --- | --- | --- | --- |
| `id` | no | `{"maxLength": 100, "pattern": "^\\s*[0-9]{6}[._][0-9]\\.[0-9]{1,4}\\.[0-9A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u024F_./ -]{0,63}[0-9A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u024F_./-]\\s*$", "type": "string"}` | not specified in the source contract |
| `lat` | no | `{"maximum": 55.0, "minimum": 49.0, "type": "number"}` | not specified in the source contract |
| `layer` | yes | `{"enum": ["planning", "parcel", "admin", "address", "buildings", "pog", "wz", "mpzp", "flood", "landslide", "protected", "road_access", "permits", "prices", "soil"], "type": "string"}` | not specified in the source contract |
| `lng` | no | `{"maximum": 24.5, "minimum": 14.0, "type": "number"}` | not specified in the source contract |
| `point` | no | `{"pattern": "^-?[0-9]{1,2}(\\.[0-9]+)?, ?-?[0-9]{1,3}(\\.[0-9]+)?$", "type": "string"}` | not specified in the source contract |
| `q` | no | `{"maxLength": 300, "minLength": 1, "type": "string"}` | not specified in the source contract |

```json
{
  "inputSchema": {
    "allOf": [
      {
        "oneOf": [
          {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "id"
                  ]
                },
                {
                  "required": [
                    "point"
                  ]
                },
                {
                  "required": [
                    "lat"
                  ]
                },
                {
                  "required": [
                    "lng"
                  ]
                }
              ]
            },
            "required": [
              "q"
            ]
          },
          {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "q"
                  ]
                },
                {
                  "required": [
                    "point"
                  ]
                },
                {
                  "required": [
                    "lat"
                  ]
                },
                {
                  "required": [
                    "lng"
                  ]
                }
              ]
            },
            "required": [
              "id"
            ]
          },
          {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "q"
                  ]
                },
                {
                  "required": [
                    "id"
                  ]
                },
                {
                  "required": [
                    "lat"
                  ]
                },
                {
                  "required": [
                    "lng"
                  ]
                }
              ]
            },
            "required": [
              "point"
            ]
          },
          {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "q"
                  ]
                },
                {
                  "required": [
                    "id"
                  ]
                },
                {
                  "required": [
                    "point"
                  ]
                }
              ]
            },
            "required": [
              "lat",
              "lng"
            ]
          }
        ],
        "properties": {
          "id": {
            "$ref": "#/$defs/ParcelIdInput"
          },
          "lat": {
            "maximum": 55.0,
            "minimum": 49.0,
            "type": "number"
          },
          "layer": {
            "enum": [
              "planning",
              "parcel",
              "admin",
              "address",
              "buildings",
              "pog",
              "wz",
              "mpzp",
              "flood",
              "landslide",
              "protected",
              "road_access",
              "permits",
              "prices",
              "soil"
            ],
            "type": "string"
          },
          "lng": {
            "maximum": 24.5,
            "minimum": 14.0,
            "type": "number"
          },
          "point": {
            "pattern": "^-?[0-9]{1,2}(\\.[0-9]+)?, ?-?[0-9]{1,3}(\\.[0-9]+)?$",
            "type": "string"
          },
          "q": {
            "maxLength": 300,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "layer"
        ],
        "type": "object"
      }
    ],
    "type": "object"
  }
}
```

## Structured results

Tools return `structuredContent (JSON)` using canonical definitions in `envelope.json`.

Compact shared local schemas. Bundle reachable $defs per tool before use; never fetch refs. Examples and detailed guidance: mcp-examples.md.

```json
{
  "allOf": [
    {
      "$ref": "#/$defs/Envelope"
    }
  ],
  "properties": {
    "meta": {
      "properties": {
        "operation": {
          "enum": [
            "layer"
          ]
        }
      }
    }
  },
  "type": "object"
}
```

Shared catalog-local `$defs` are published once in [MCP catalogue](../mcp.md). See [Envelope](../envelope.md) and the bound operation for responses.

## Server instructions (verbatim)

Źródłowe informacje o polskich działkach ewidencyjnych. Przekazuj w q tekst wpisany przez użytkownika. Każde narzędzie samodzielnie rozpoznaje działkę, więc wcześniejsze wywołanie resolve nie jest potrzebne. Przy statusie ambiguous pokaż kandydatów albo ponów wywołanie z id wybranego kandydata; nigdy nie wybieraj samodzielnie bez wiedzy użytkownika. Każda odpowiedź dotycząca danych tematycznych zawiera coverage i note: covered oznacza obecność rekordu, covered_no_data oznacza brak rekordu w źródle obejmującym to miejsce, not_covered oznacza brak publikacji przez państwo lub brak danych w tym miejscu, a not_computed oznacza, że wyniku jeszcze nie obliczono. Cytując fakt, przytocz note, source.attribution i as_of. Nie określaj działki jako „bezpiecznej”: podaj, co wynika z każdego źródła i czego ono nie obejmuje. Nie pisz „brak planu” bez wskazania, czy chodzi o plan ogólny czy MPZP, jego statusu (draft, adopted, in_force, none; dla MPZP status może być null, gdy źródło go nie publikuje) i źródła. Jeżeli źródło wymienia strefę MPZP bez statusu prawnego, coverage wynosi covered, a status i effective_from mają wartość null; przytocz note i nie ustalaj statusu samodzielnie. Nie zwracamy numerów ksiąg wieczystych ani danych właścicieli. Pole billing pokazuje koszt wywołania; opłaty za odpowiedzi not_covered i błędy są zwracane. Każda odpowiedź v2 zawiera licencję, zakres i metodę. extracted oznacza metodę pozyskania, a nie stan coverage; wynik poniżej progu ma stan not_covered. Powierzchnia z area.source równym computed nie jest urzędową powierzchnią działki. Klucze API i połączenie OAuth korzystają z kredytów tego samego konta. Wyszukiwanie na podstawie ogłoszenia zwraca wyłącznie identyfikatory kandydatów i wymaga włączenia LANDFEED_LISTING_LOOKUP_ENABLED.

## Annotations

```json
{
  "idempotentHint": true,
  "openWorldHint": false,
  "readOnlyHint": true
}
```

## Coverage states

Cztery stany zakresu danych dla jednej kategorii w danym miejscu. covered: źródło obejmuje to miejsce i zawiera rekord; value zawiera ten rekord. covered_no_data: źródło obejmuje to miejsce, lecz nie zawiera rekordu; value ma określoną dla danej kategorii pustą wartość (false, 0, [], none), nigdy null; jest to potwierdzony brak rekordu, za który naliczana jest opłata. not_covered: źródło nie obejmuje miejsca albo państwo nie publikuje tych danych w postaci do odczytu maszynowego; value=null, agent nie może wyciągać wniosków, a opłata jest zwracana, gdy zapytanie dotyczy tych danych. not_computed: posiadamy źródło, lecz nie obliczyliśmy jeszcze wyniku dla tego miejsca, np. trwa ładowanie zbioru; value=null, opłata jest zwracana. Każdy stan zawiera uwagę napisaną prostym językiem.

States: `covered` | `covered_no_data` | `not_covered` | `not_computed`.

`LayerAnswer` required fields: `layer`, `coverage`, `value`, `note`, `source`, `as_of`, `layer_version`.

## Billing rule

Koszt żądania. charged: liczba naliczonych wywołań po zwrotach. refunded: liczba wywołań naliczonych, a następnie zwróconych. rule: zastosowana reguła. Płatne są odpowiedzi, potwierdzone braki rekordów (covered_no_data) i niejednoznaczne listy kandydatów. Bezpłatne są błędne dane wejściowe (400), brak uwierzytelnienia (401), odpowiedzi bez zmiany danych (304) i operacje bezpłatne. Zwrot obejmuje pozostałe 4xx, każde 5xx, status not_covered oraz odpowiedź dotyczącą jednej kategorii ze stanem not_covered lub not_computed. W operacjach zbiorczych liczby dotyczą poszczególnych elementów.

Rule values: `charged` | `free_operation` | `free_invalid_input` | `free_unauthorized` | `free_not_modified` | `refunded_client_error` | `refunded_server_error` | `refunded_not_covered` | `refunded_not_computed` | `batch_mixed`.

## curl example of the REST binding

```sh
curl --silent --show-error --request GET "https://mcp.agentdzialek.pl/v1/layer/flood" --get \
  -H "X-Api-Key: ${LANDFEED_API_KEY}" \
  --data-urlencode 'id=141803_2.0001.12/3'
```

MCP transport invocation: not specified in the source contract.
