esticrm-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@esticrm-mcpPokaż mi ostatnich klientów"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Połącz EstiCRM z klientem MCP
Ten projekt uruchamia lokalny serwer Model Context Protocol (MCP), który udostępnia wybrane operacje EstiCRM w Codexie, Claude Code i Claude Desktop. Każda osoba używa własnego identyfikatora firmy oraz tokenu API, a narzędzia zapisujące dane pozostają domyślnie wyłączone.
To projekt społecznościowy, nieoficjalny i niepowiązany z EstiCRM. Nie jest produktem, usługą ani integracją zatwierdzoną przez operatora EstiCRM. Przed użyciem na danych produkcyjnych sprawdź aktualne warunki usługi i zakres uprawnień swojego konta.
Co umożliwia serwer
Serwer tłumaczy polskie wywołania narzędzi MCP na ograniczony zestaw operacji APIClient EstiCRM. Działa lokalnie przez standardowe wejście i wyjście procesu (stdio), bez własnego serwera HTTP i bez wspólnego konta pośredniczącego.
Projekt obejmuje:
polskie nazwy, opisy i komunikaty narzędzi
bezpieczne ustawienia domyślne tylko do odczytu
maskowanie danych kontaktowych klienta w domyślnym widoku
walidację argumentów przed wysłaniem żądania
kontrolowany odstęp między żądaniami i limit czasu
rozpoznawanie błędu zwróconego przez EstiCRM z kodem HTTP 200
opcjonalne narzędzia zapisu wymagające jawnego włączenia
testy bez prawdziwych danych EstiCRM
Related MCP server: EspoCRM MCP Server
Wymagania przed instalacją
Do uruchomienia potrzebujesz:
Node.js 20.19 lub nowszego z linii 20 albo Node.js 22.12 lub nowszego, w tym Node.js 24
pnpm, najlepiej włączonego przez Corepack
konta EstiCRM z dostępem do API
własnych wartości
ESTICRM_COMPANY_IDiESTICRM_API_TOKENklienta obsługującego lokalne serwery MCP przez
stdio
Dostępność poszczególnych operacji zależy od planu i uprawnień nadanych przez EstiCRM. Jeśli nie widzisz danych API w panelu, skontaktuj się z pomocą EstiCRM.
Zainstaluj projekt z GitHuba
Repozytorium możesz sklonować i zbudować lokalnie:
git clone https://github.com/flatmoonsociety/esticrm-mcp.git
cd esticrm-mcp
corepack enable
pnpm install --frozen-lockfile
pnpm buildProjekt nie wymaga globalnej instalacji pakietu. Klient MCP uruchamia zbudowany plik dist/index.js przy każdym połączeniu.
Pakiet jest oznaczony jako prywatny dla rejestrów npm i nie jest przeznaczony do publikacji w npm. Współdzielenie projektu odbywa się przez to repozytorium GitHub.
Skonfiguruj dane dostępowe
Utwórz lokalny plik .env z dostarczonego wzoru i ogranicz jego uprawnienia:
cp .env.example .env
chmod 600 .envW Windows PowerShell użyj Copy-Item .env.example .env i pomiń polecenie chmod.
Otwórz .env, a następnie zastąp dwa opisowe symbole zastępcze własnymi danymi:
ESTICRM_COMPANY_ID=wpisz_id_firmy
ESTICRM_API_TOKEN=wpisz_token_api
ESTICRM_ENABLE_WRITES=false
ESTICRM_TIMEOUT_MS=15000
ESTICRM_REQUEST_INTERVAL_MS=1100
ESTICRM_MAX_RESPONSE_BYTES=2097152
ESTICRM_MAX_ACTIVE_REQUESTS=25Plik .env jest ignorowany przez Git. Nie przekazuj go innym osobom i nie dodawaj jego zawartości do zgłoszeń błędów.
Opcjonalne ustawienia mają następujące znaczenie:
Zmienna | Wartość domyślna | Działanie |
|
| Udostępnia narzędzia zapisujące po ustawieniu |
|
| Przerywa pojedyncze żądanie po podanej liczbie milisekund |
|
| Ustawia minimalny odstęp między żądaniami w milisekundach |
|
| Ogranicza rozmiar treści pojedynczej odpowiedzi do podanej liczby bajtów, domyślnie 2 MiB |
|
| Odrzuca nowe operacje, gdy liczba trwających i oczekujących wywołań osiągnie limit |
Ustawienie zapisu akceptuje także 1 lub tak. Pozostaw false, jeśli potrzebujesz wyłącznie odczytu.
Połącz serwer z Codexem
Codex może zapisać konfigurację lokalnego serwera jednym poleceniem. Zastąp obie ścieżki pełną ścieżką do sklonowanego repozytorium:
codex mcp add esticrm -- \
node \
--env-file=/Users/jan/projekty/esticrm-mcp/.env \
/Users/jan/projekty/esticrm-mcp/dist/index.jsSprawdź konfigurację poleceniem codex mcp list. Sekrety pozostają w pliku .env i nie trafiają do historii poleceń.
W Windows PowerShell użyj znaku kontynuacji wiersza właściwego dla tej powłoki:
codex mcp add esticrm -- `
node `
--env-file=C:/Users/jan/projekty/esticrm-mcp/.env `
C:/Users/jan/projekty/esticrm-mcp/dist/index.jsPołącz serwer z Claude
Claude Code odczytuje projektową konfigurację z pliku .mcp.json. Claude Desktop używa tego samego obiektu mcpServers w swoim pliku claude_desktop_config.json. Na macOS znajdziesz ten plik w ~/Library/Application Support/Claude/, a w Windows w %APPDATA%\Claude\.
{
"mcpServers": {
"esticrm": {
"type": "stdio",
"command": "node",
"args": [
"--env-file=/Users/jan/projekty/esticrm-mcp/.env",
"/Users/jan/projekty/esticrm-mcp/dist/index.js"
]
}
}
}Zastąp przykładową nazwę jan i ścieżki pełną lokalizacją repozytorium. W Windows możesz użyć ścieżek z ukośnikami, na przykład C:/Users/jan/projekty/esticrm-mcp/.env. Uruchom ponownie aplikację Claude, a następnie sprawdź listę połączeń MCP. Projektowego pliku .mcp.json nie dodawaj do publicznego repozytorium, jeśli zawiera ustawienia właściwe dla Twojego środowiska.
Dostępne narzędzia MCP
Wersja 0.1 udostępnia polski interfejs do najczęstszych operacji. Dokładny wynik zależy od odpowiedzi API i uprawnień konta.
Narzędzie | Tryb | Zastosowanie |
| Odczyt | Pobiera stronicowaną listę ofert przez udokumentowane parametry |
| Odczyt | Pobiera szczegóły jednej oferty |
| Odczyt | Pobiera klienta, domyślnie z ukrytymi danymi kontaktowymi |
| Odczyt | Pobiera oferty powiązane z klientem |
| Odczyt | Pobiera listę agentów |
| Odczyt | Wyszukuje lokalizacje obsługiwane przez EstiCRM |
| Odczyt | Pobiera obsługiwany słownik ofert, mapowania lub systemowy |
| Odczyt | Sprawdza dostępność terminu w kalendarzu |
| Odczyt | Pobiera wydarzenia z zadanego zakresu |
| Odczyt | Pobiera listę inwestycji |
| Odczyt | Pobiera listę biur |
| Zapis | Tworzy zapytanie klienta po włączeniu zapisów |
| Zapis | Tworzy termin po włączeniu zapisów |
Klient MCP nie zobaczy dwóch narzędzi zapisu, dopóki ESTICRM_ENABLE_WRITES ma wartość false. Po zmianie ustawienia uruchom klienta ponownie i uważnie sprawdzaj argumenty każdego zapisu.
Narzędzia kalendarza przyjmują lokalny czas EstiCRM. Odczyt zakresu wymaga formatu RRRR-MM-DD GG:MM:SS, a utworzenie terminu — RRRR-MM-DD GG:MM. Publiczny kontrakt zapisu odpowiada bieżącym przykładom EstiCRM: zapytanie przekazuje między innymi e-mail agenta, transakcję, rynek i typ, natomiast termin może przekazać dane_klienta oraz numer_oferty. Pola zapisu nie są oznaczone w dokumentacji jako wymagane lub opcjonalne, dlatego przed użyciem produkcyjnym sprawdź je na własnym koncie testowym.
Ograniczenia API EstiCRM
Ten serwer służy do celowanych, interaktywnych operacji. Oficjalne materiały EstiCRM zalecają XML do pełnej lub masowej synchronizacji ofert z własną stroną. Nie używaj narzędzi MCP do cyklicznego pobierania całej bazy ani jako zamiennika eksportu XML.
Publiczna dokumentacja APIClient zawiera nieścisłości, w tym opisy wyglądające na skopiowane między operacjami. Projekt implementuje tylko jawnie obsługiwane wywołania i zabezpiecza ich kontrakty testami. Przed dodaniem kolejnej operacji potwierdź jej zachowanie na koncie testowym lub z pomocą EstiCRM.
W szczególności offer/list otrzymuje wyłącznie opublikowane parametry skip i take. Projekt celowo nie wysyła do tej operacji nieudokumentowanych filtrów status, type, transaction, phrase ani updateDate.
API może odpowiedzieć kodem HTTP 200 oraz result: false. Serwer sprawdza treść odpowiedzi, zamiast uznawać każdy kod 200 za sukces. Adres bazowy API jest celowo stały i nie można skierować tokenu na inny serwer przez zmienną środowiskową.
Chroń dane i zachowaj zgodność z RODO
Odpowiadasz za podstawę prawną, zakres i sposób przetwarzania danych pobranych z własnego konta. Ogólne rozporządzenie o ochronie danych (RODO) wymaga między innymi minimalizacji danych i ograniczenia dostępu.
Stosuj następujące zasady:
nadaj tokenowi najmniejszy dostęp potrzebny do zadania
pozostaw narzędzia zapisu wyłączone, jeśli ich nie używasz
nie wklejaj wyników zawierających dane osobowe do publicznych rozmów
sprawdź politykę przechowywania danych używanego klienta i modelu
regularnie zmieniaj token oraz unieważnij go po podejrzeniu ujawnienia
usuń parametry zapytań i dane klientów przed udostępnieniem logów
używaj fikcyjnych danych w testach, przykładach i zgłoszeniach
Serwer nie zapisuje tokenu w repozytorium i nie powinien umieszczać go w błędach. Sam klient MCP może jednak przekazać wynik narzędzia do wybranego modelu. Ogranicz zakres zapytania przed pobraniem danych.
Więcej zasad znajdziesz w dokumencie Zasady bezpieczeństwa.
Uruchom testy
Jedno polecenie sprawdza typy, testy, kompilację i połączenie MCP:
pnpm sprawdzMożesz też uruchomić kontrole osobno:
pnpm typecheck
pnpm test
pnpm build
pnpm smokeTesty muszą działać bez produkcyjnego konta EstiCRM. Nie dodawaj prawdziwych odpowiedzi API jako danych testowych.
Współtwórz projekt
Zgłoszenia błędów i propozycje są mile widziane. Przed zmianą kodu przeczytaj instrukcję współtworzenia, kodeks postępowania, zasady bezpieczeństwa i historię zmian.
Oficjalne źródła
Te materiały pomagają zweryfikować zachowanie integracji:
Licencja i znaki towarowe
Kod jest dostępny na warunkach licencji MIT. Nazwa EstiCRM oraz powiązane znaki należą do ich właścicieli i występują tu wyłącznie w celu opisania kompatybilności.
Available Tools
11 toolsesticrm_dane_klientaDane klienta EstiCRMARead-onlyIdempotent
Pobiera dane jednego klienta. Dane kontaktowe są domyślnie ukryte i pojawiają się tylko po jawnym ustawieniu parametru.
| Name | Required | Description | Default |
|---|---|---|---|
| id_klienta | Yes | ||
| pokaz_dane_kontaktowe | No | Ustaw true tylko wtedy, gdy dane kontaktowe są potrzebne do zadania. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint. The description adds a meaningful behavioral detail beyond annotations: contact data are hidden by default and only appear when the parameter is explicitly set. This helps the agent avoid assuming full data will always come back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, each earning its place: the first states the core purpose, the second surfaces an important default behavior. No filler or redundant repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with an output schema, rich annotations, and only two parameters, the description is sufficient. The key gotcha—hidden contact data—is disclosed, and the schema covers parameter syntax and defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, so the description should compensate. It does clarify the behavior of pokaz_dane_kontaktowe, but it adds little semantic meaning for id_klienta beyond what the property name already implies. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Pobiera dane jednego klienta' (retrieves data of one client). This clearly distinguishes it from sibling tools, which target offers, agents, locations, dictionaries, calendar events, investments, and offices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear: call this tool when you need data for a single client. It does not name alternatives explicitly, but none of the sibling tools appear to compete for the same job, so the lack of exclusionary guidance is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_lista_agentowLista agentów EstiCRMARead-onlyIdempotent
Pobiera ograniczoną listę agentów bez ujawniania danych kontaktowych.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów w odpowiedzi. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety via readOnlyHint, idempotentHint, and destructiveHint=false. The description adds one useful behavioral constraint—the response is limited and omits contact data—but does not describe pagination, sorting, or result availability. This is helpful but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one focused sentence with no filler. It front-loads the action and resource, then states the key limitation. Every phrase earns its place and matches the low complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list operation with full schema coverage, an output schema, and safety annotations, the description is nearly sufficient. It clearly states the tool returns a limited agent list without contact data, though response details are mostly delegated to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the sole 'limit' parameter has a complete schema description: 'Maksymalna liczba rekordów w odpowiedzi.' The description's phrase 'ograniczoną listę' loosely reflects the limit concept but adds no new parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Pobiera' - retrieves) and resource ('listę agentów'), and adds a distinctive scope: a limited list without contact data. This differentiates it from sibling list tools such as esticrm_lista_ofert, esticrm_lista_biur, and esticrm_lista_inwestycji, and from tools that would expose contact details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: get a bounded list of agents when contact details are not needed. However, it does not explicitly name alternatives, give when-not-to-use conditions, or explain how it differs from sibling tools beyond the resource type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_lista_biurLista biur EstiCRMARead-onlyIdempotent
Pobiera ograniczoną listę biur.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów w odpowiedzi. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, open-world, and non-destructive, so the safety profile is well covered. The description adds only the mild behavioral trait that the returned list is limited/restricted, without detailing ordering, default cap, pagination, or completeness; this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with the key information front-loaded: action, resource, and limiting behavior. There is no wasted wording, and the size is appropriate for a one-parameter read-only tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description together with the rich annotations, fully documented limit parameter, and presence of an output schema is enough for an agent to call it correctly. Nothing critical is missing for this low-complexity operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is exactly one parameter, 'limit', and the input schema documents it fully with a default, minimum, maximum, and a clear description. The tool description adds no parameter-specific meaning beyond the vague word 'ograniczoną', so the schema carries the burden; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('pobiera' – retrieves) and a distinct resource ('listę biur' – list of offices), and signals that the result is limited. This differentiates it from sibling list tools such as lista_ofert, lista_agentow, and lista_inwestycji by resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance, and it does not mention any alternatives or exclusions relative to the sibling tools. Usage must be inferred entirely from the resource name and the generic verb, so the tool does not help an agent decide between this and other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_lista_inwestycjiLista inwestycji EstiCRMBRead-onlyIdempotent
Pobiera lub filtruje ograniczoną listę inwestycji.
| Name | Required | Description | Default |
|---|---|---|---|
| fraza | No | ||
| limit | No | Maksymalna liczba rekordów w odpowiedzi. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds that the returned list is 'ograniczoną' (limited), which is a useful behavioral hint, but does not disclose much beyond that and the schema already conveys limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to identifying the operation and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with output schema and safety annotations, the description is mostly adequate. But it lacks explicit parameter semantics for 'fraza' and any usage context relative to sibling list tools, leaving an agent to infer important calling details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes 'limit' explicitly, and the description's mention of filtering gives some clue that 'fraza' is a filter parameter. However, the description does not clarify how 'fraza' behaves (e.g., partial match, which fields are searched), so it only marginally compensates for the missing schema description on that parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Pobiera' - retrieves) with an explicit resource ('listę inwestycji'), and the resource makes it distinguishable from sibling tools like esticrm_lista_ofert. However, the phrase 'lub filtruje ograniczoną listę' introduces some ambiguity about whether this returns a bounded subset or filters by criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus sibling tools, no mention of alternatives, and no exclusions. The intended use is only implied by the name and resource, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_lista_ofertLista ofert EstiCRMBRead-onlyIdempotent
Pobiera ograniczoną, stronicowaną listę ofert. Narzędzie jest tylko do odczytu.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów w odpowiedzi. | |
| strona | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeats the read-only behavior already declared by readOnlyHint=true, which adds little. It does add useful behavioral context by describing the result as 'ograniczoną, stronicowaną listę', indicating pagination and a bounded result set. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core action and scope. It contains no filler or unnecessary detail, though the read-only statement is somewhat redundant with the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only paginated list, the description covers the basic invocation needs, and the output schema can supply return-shape details. It is less complete as a standalone guide because it does not clarify when to choose this list over sibling offer-related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents 'limit' but not 'strona', and the description's mention of pagination helps hint at the meaning of 'strona'. However, the description does not explicitly explain the page parameter or its relationship to the list, leaving some inference required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Pobiera ... listę ofert' (retrieves a list of offers), and adds that the list is limited and paginated. It is clear, but it does not explicitly distinguish itself from siblings like esticrm_oferty_klienta or esticrm_szczegoly_oferty.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It conveys only what the tool does, not when it should be preferred over esticrm_oferty_klienta or esticrm_lista_inwestycji.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_oferty_klientaOferty klienta EstiCRMARead-onlyIdempotent
Pobiera ograniczoną listę ofert przypisanych do jednego klienta.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów w odpowiedzi. | |
| id_klienta | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, which covers the safety profile. The description adds useful behavioral context by saying the list is 'ograniczona' and filtered to one client, but does not disclose other behaviors such as pagination or response ordering. With strong annotation coverage, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler and the key limitation is front-loaded. It is not overlong, though it could have added a sentence about alternatives without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, two-parameter retrieval tool with a rich annotation set and an output schema, the description is largely sufficient. It communicates the core purpose and scope, while schema and annotations carry the remaining details. The only clear gap is the lack of explicit sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, so the description must compensate for the undocumented `id_klienta` parameter. It partially does by explaining that the offers belong to one client. The `limit` parameter is already well covered by its schema description, so no additional explanation is needed there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Pobiera' (fetches), names the resource, 'ograniczoną listę ofert', and clearly scopes it to 'przypisanych do jednego klienta'. This distinguishes it from sibling tools like the general list of offers or offer details, even though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need a limited list of offers for one client. However, it gives no explicit guidance about when not to use it or which sibling should be preferred instead, such as esticrm_lista_ofert for unfiltered offer lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_pobierz_slownikSłownik EstiCRMARead-onlyIdempotent
Pobiera jeden z trzech słowników: ofert, mapowania ofert albo systemowy. Nie pozwala wywołać dowolnej ścieżki API.
| Name | Required | Description | Default |
|---|---|---|---|
| nazwa | No | ||
| rodzaj | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, openWorld, and idempotent behavior, so the bar for the description is lower. The description adds a valuable behavioral limitation: the tool only exposes three fixed dictionaries and cannot be used as a generic API endpoint, which is exactly the kind of nuance an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary action and followed by one necessary constraint. There is no filler or repetition of the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with an output schema and rich annotations, the description is nearly complete: it identifies the required parameter's domain and an important safety boundary. The only meaningful gap is the undocumented optional 'nazwa' parameter, which is not required for a valid call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the parameter burden. It maps the enum values of 'rodzaj' to the three dictionaries, but it says nothing about the optional 'nazwa' parameter, leaving its meaning and effect ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'pobiera' one of three dictionaries, and it explicitly enumerates them (oferty, mapowanie_ofert, systemowy). It also distinguishes itself from a generic API-call tool by adding the constraint that it cannot invoke an arbitrary API path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is only implied: an agent should call this when it needs one of the three named dictionaries. The description includes a useful 'when-not' ('Nie pozwala wywołać dowolnej ścieżki API'), but it does not mention alternatives or explain when a sibling tool would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_sprawdz_terminSprawdzenie terminu EstiCRMARead-onlyIdempotent
Sprawdza dostępność terminu w kalendarzu wskazanym adresem e-mail agenta.
| Name | Required | Description | Default |
|---|---|---|---|
| do | Yes | Lokalna data i czas EstiCRM w formacie RRRR-MM-DD GG:MM:SS. | |
| od | Yes | Lokalna data i czas EstiCRM w formacie RRRR-MM-DD GG:MM:SS. | |
| kalendarz | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive operation, so the description is not required to restate safety. It adds only the calendar-identification detail; it does not disclose extra behavior such as overlap semantics or result handling, though the presence of an output schema reduces that need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence carries the full purpose without extraneous content. It earns its place and does not repeat schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only availability check with complete annotations and an output schema, the description is nearly sufficient. It could be slightly stronger with an explicit note on when to prefer this over the calendar-events sibling, but nothing essential for invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema leaves 'kalendarz' undocumented except for maxLength; the description compensates by indicating it is the calendar identified by the agent's email address. The od/do time-range parameters are already described in the schema, so the description's contribution is concentrated where it is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Sprawdza dostępność') and names the resource ('terminu w kalendarzu... adresem e-mail agenta'), making the tool's function unambiguous. It is distinct from siblings like esticrm_wydarzenia_kalendarza, which would list calendar events rather than check availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for checking availability in an agent's calendar, but it gives no explicit when-to-use guidance or exclusions and does not point to alternatives such as esticrm_wydarzenia_kalendarza. Usage context is inferred from the purpose rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_szczegoly_ofertySzczegóły oferty EstiCRMARead-onlyIdempotent
Pobiera szczegóły jednej oferty po jej identyfikatorze.
| Name | Required | Description | Default |
|---|---|---|---|
| id_oferty | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description ('Pobiera' — fetches) is fully consistent with them, so there is no contradiction. The description adds no behavioral context beyond the annotations — no return-format, error, or availability notes — but for a simple read operation the annotated safety profile covers the main concerns. Adequate but unexceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, grammatically simple sentence that front-loads the action and stops. There is zero filler, and the length is appropriate for a one-parameter read-only tool. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, an output schema present, and annotations carrying the read-only/idempotent/non-destrucive profile, the description covers the essentials for invoking this tool correctly. The only real gap is routing guidance versus the sibling offer tools, which belongs to the usage dimension. For the tool's low complexity, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only re-states what the parameter name `id_oferty` already conveys: the identifier selects the offer. No extra semantics are added — no format guidance for the string/integer union, no indication of where the ID comes from, and no behavior for unknown IDs. The parameter is self-explanatory by name, but the description adds essentially nothing beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Pobiera' — fetches) with a specific resource ('szczegóły jednej oferty' — details of one offer) and the access path ('po jej identyfikatorze' — by its ID). This clearly signals a single-record lookup and implicitly contrasts with the sibling list tools such as `esticrm_lista_ofert`, though no sibling is explicitly named. Clear and specific, but the sibling differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative tool is mentioned anywhere in the description. An agent must infer that this tool is for retrieving one offer when the ID is already known, and that browsing or filtering belongs to `esticrm_lista_ofert` or `esticrm_oferty_klienta`. The usage context is implied by the tool's nature but never stated, with no exclusions or prerequisities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_wydarzenia_kalendarzaWydarzenia kalendarza EstiCRMARead-onlyIdempotent
Pobiera ograniczoną listę wydarzeń z kalendarza wskazanego adresem e-mail agenta.
| Name | Required | Description | Default |
|---|---|---|---|
| do | Yes | Lokalna data i czas EstiCRM w formacie RRRR-MM-DD GG:MM:SS. | |
| od | Yes | Lokalna data i czas EstiCRM w formacie RRRR-MM-DD GG:MM:SS. | |
| limit | No | Maksymalna liczba rekordów w odpowiedzi. | |
| kalendarz | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context by saying the result is 'ograniczoną listę' (a limited list), which hints at result-set boundaries, and clarifies that the calendar is identified by an agent email.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states the verb, resource, and key scoping detail without filler or repetition. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema is present and the annotations cover the safety profile, so those aspects do not need to be restated. The description adequately identifies the calendar and result-set nature; the date-range and limit parameters are documented in the schema, making the definition sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover 'od', 'do', and 'limit'. The description adds value for the undocumented 'kalendarz' parameter by indicating that the calendar is specified through the agent's email address, and 'ograniczoną listę' maps to the limit behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Pobiera' - fetches) and names the resource precisely: a limited list of events from a calendar indicated by the agent's email address. This clearly distinguishes it from sibling tools, none of which are described as calendar-event retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use when you need a bounded list of events from a specific agent's calendar. The description gives useful context by specifying the calendar is selected via the agent's email, but it does not name alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esticrm_wyszukaj_lokalizacjeWyszukiwanie lokalizacji EstiCRMARead-onlyIdempotent
Wyszukuje lokalizacje po krótkiej frazie i ogranicza liczbę wyników.
| Name | Required | Description | Default |
|---|---|---|---|
| fraza | Yes | ||
| limit | No | Maksymalna liczba rekordów w odpowiedzi. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| blad | No | |
| dane | No | |
| opis | Yes | |
| metadane | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds that the search uses a short phrase and limits results, but does not disclose behavior like partial matching, case sensitivity, or empty-result handling. With annotations handling the main risk disclosure, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise Polish sentence conveys both the action and the limit behavior without wasted words. Information density is high and the most important detail (search by phrase) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter search tool with an output schema and robust annotations, the description is nearly complete. The main gap is the absence of any note on where location data comes from or how it connects to related entities, but that is not essential for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: only limit has a description. The description partially compensates by indicating fraza is a short phrase used for searching and that results are limited, but it doesn't elaborate on matching semantics or expected input format. This is enough to make both parameters understandable, but not a strong compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Wyszukuje lokalizacje' (searches locations) by a short phrase with a result limit. This clearly distinguishes it from its siblings, which operate on different entities (offers, clients, agents, investments, offices).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: an agent should call this when it needs to find locations from a short text phrase. No sibling tool provides a similar location search, so explicit exclusion of alternatives is unnecessary; however, the description does not state when not to use it or how it relates to list_inwestycji or list_biur.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
esticrm_dane_klienta - First observed
esticrm_lista_agentow - First observed
esticrm_lista_biur - First observed
esticrm_lista_inwestycji - First observed
esticrm_lista_ofert - First observed
esticrm_oferty_klienta - First observed
esticrm_pobierz_slownik - First observed
esticrm_sprawdz_termin - First observed
esticrm_szczegoly_oferty - First observed
esticrm_wydarzenia_kalendarza - First observed
esticrm_wyszukaj_lokalizacje
TDQS
Scored across 11 tools
Each tool targets a distinct resource and action: offers, clients, agents, locations, dictionaries, calendar, investments, and offices. The overlapping offer-listing tools are clearly differentiated by scope (all offers vs. offers for a specific client), so an agent should not misselect.
All tools share the esticrm_ prefix and use snake_case, with a mostly consistent action_noun pattern such as lista_ofert, pobierz_slownik, and sprawdz_termin. The pattern deviates slightly with noun-phrase names like szczegoly_oferty and wydarzenia_kalendarza.
Eleven tools is a well-scoped set for a read-only CRM query server. Each tool covers a distinct data retrieval need without unnecessary duplication.
The surface covers offers, clients, agents, calendars, locations, investments, offices, and dictionaries, which is broad for a read-only toolset. The main gap is the absence of a client search or list endpoint to discover client IDs, though clients may be reachable through offer data.
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Furgonetka MCP Server is an extension for LLMs (such as Claude) that integrates AI assistants with Poland's most popular courier brokerage platform. The server enables models to interact directly with services from various couriers (including InPost, DPD, DHL, UPS, and Poczta Polska) through a single, unified interface. With this integration, your AI stops just "writing about logistics" and starts actually managing it.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceProduction-grade MCP server for Bitrix24 Cloud with 45 tools, safe by default. Connects Claude Desktop to your Bitrix24 tenant for AI-driven CRM, tasks, messaging, and calendar operations.-
- AlicenseNot gradedqualityBmaintenanceA local, read-only MCP server for Claude Desktop that provides 16 tools to search and read EspoCRM accounts, contacts, opportunities, and related emails via a strict allowlist.12 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables Claude to read weclapp data such as customers, invoices, and articles via a secure MCP server.-
- AlicenseNot gradedqualityAmaintenanceConnects MCP clients such as OpenCode or Claude to Tauron eLicznik energy data, exposing tools to list metering points, retrieve consumption/generation/net energy metrics, and fetch cumulative meter readings.1MIT