logo-consult.org
Apollo exposes 26 public tools on this MCP endpoint.
Opens ChatGPT on the web or desktop and asks it to use the WebMCP tools available here.
Connect straight to this server’s public endpoint.
https://mcp.logo-consult.org/mcpWe add this server to your workspace, then open Studio — saved access, one connection to many servers, with a history of what ran.
Last probed Sep 14, 2026 · mcp.logo-consult.org
26tools discovered
Showing 25 of 26 from the live probe.
Get Company
Everything about ONE company in a single call: its own fields, addresses, phone/email, contact people, its customer record (with the customer id other tools need), who owns the customer, the last 10 events, the last 5 contact reports and up to 10 active shipment flows. Pass the company id from FindCompanies. Use this for any "tell me about X", "prepare me for the call with X", "brief me on X" request — it replaces six separate calls. The customer id in `company.customer.id` is a DIFFERENT
Create Contact
Create a contact person at a company. A contact is a person that belongs to a company — pass `companyId` (required; look the company up first via FindCompanies) and at least `lastName` (required). `salutationId` is the form of address (Mr/Ms/…), `title` an academic title, `department` the department, `isMainContact` marks the primary contact, and `info` holds free-text notes. `errors` is empty on success; on validation failure `contactPerson` is null and `errors` lists what failed. Use when
Create Shipment Flow
Create a shipment flow — a sales-pipeline opportunity describing a recurring shipment/trade lane for a customer (shipper → consignee, goods, expected revenue, sales stage). Link it to a customer with `companyId` — look the company up first via FindCompanies and pass its id (the flow attaches to that company's customer record). `headline` is required and titles the opportunity. `salesStageId` places it in the pipeline; `shipperCountryId`/`consigneeCountryId` describe the lane; `kindOfGoods`
Update Contact Report
Update an existing contact report by its document id. A contact report is a Document of type "document_contact_report", so this patches the parent document and its nested contact-report detail in one call. Pass the `id` of the document (the id returned when the report was created). Only the fields you supply are changed — omitted variables are left untouched (GraphQL treats an unset variable as absent), so pass just what you want to edit. Use `companyId` to re-link the report to a different
Find Contact Reports
Read contact reports — the record of a visit, call or meeting with a customer. This is the customer's conversation history: use it for "what did we discuss with X", "when did we last speak to X", "summarise our relationship with X". Pass `companyId` from FindCompanies. `from`/`to` bound `contact_from`, a datetime. `info` is the report body — the conversation content, and what `CreateContactReport`/`UpdateContactReport` write; `info2` holds other participants ("also present: …"). Read `info
Aggregate Customers
Customer counts and stored customer turnover, broken down along one or more axes. Switch an axis ON by passing its boolean; each enabled axis comes back under its own key. Set at least one, or the response is empty. byType -> one row per customer type, named in the key byQualification -> one row per lead qualification, named in the key bySource -> one row per lead source, named in the key bySince -> one row per period of customer_since (sinceBucket, default
Create Company Tcom
Add a communication entry — phone, mobile, fax, email or website — to an existing company. `tcomTypeLabelId` says which kind it is and comes from GetLookups (`tcomTypeLabels`); `value` is the number or address itself. `errors` is empty on success; on failure `companyTcom` is null and `errors` lists what failed. Use when the user asks to add a company's phone number, email or website. This is the only way to create one: there is no standalone communication mutation. For a contact PERSON's
Aggregate Companies By Country
Count companies per COUNTRY, from each company's main address, with the country name in the key. Use for "how many customers do we have per country", "where are our partners", "which countries are we strongest in". Pass `companyTypeName` to restrict the population: CUSTOMER, PARTNER, COMPETITOR or CONSIGNEE_SHIPPER — omit it to count all companies. The country comes from the company's MAIN address only, so a company counts exactly once even when it has several addresses. A company with no
Create Company Address
Add an address to an existing company. Look the company up first (FindCompanies), take `addressTypeId` from GetLookups and `countryId` from FindCountries. The street and city rows are created along with the address. `errors` is empty on success; on failure `companyAddress` is null and `errors` lists what failed. Use when the user asks to add a company's address. `countryId` is REQUIRED — the call is rejected outright without it, and FindCountries is where it comes from. ONE MAIN ADDRESS P
Me
Sanity/auth check: returns the currently authenticated API user. Use to confirm the MCP server can reach and authenticate against the GraphQL API.
Find Shipments
List individual shipments — the row-level detail underneath AggregateShipments. Use it to explain an aggregate ("which shipments made that month spike"), to show the last shipments of a customer, or to look one up by its shipment key. For any "how much / how many / per month / per division" question use AggregateShipments instead: this tool returns at most one page of rows and must never be summed by hand. `from`/`to` bound `shipment_date`, a plain CALENDAR DATE — pass "YYYY-MM-DD", not a
Update Shipment Flow
Update an existing shipment flow (sales-pipeline opportunity / trade lane) by id. Only the fields you supply are changed — omitted variables are left untouched (GraphQL treats an unset variable as absent), so pass just what you want to edit. `salesStageId` moves it in the pipeline; `shipperCountryId`/`consigneeCountryId` change the lane; `kindOfGoods` is the cargo; `revenue` and `opportunityValue` are the expected/weighted value; `startDate`/`docDate` are the dates; `info` holds free-text n
Get Lookups
Every small CRM lookup table in one call: the id ↔ name maps behind the id-valued arguments of the other tools, and behind raw ids other tools return unresolved. No arguments. Call this FIRST whenever a request names a division, sales stage, company or customer type, lead source, lead qualification, event type/category/priority, contact function, contact type, document type, address type, communication type, salutation, owner role or currency in WORDS — most of these have a matching filter
Update Company
Update an existing company by id. Only the fields present in `input` are changed. `errors` is empty on success; on validation failure `company` is null and `errors` lists what failed. Use when the user asks to edit/change/update a company. Look up the id first via FindCompanies.
Get Change History
The audit trail for one record: who changed which fields, when. Pass the record's GraphQL type name as `itemType` ("Company", "ContactPerson", "Event", "ShipmentFlow", "Document") and its id as `itemId`. Use for "who changed this", "when was this last edited", "show the history of X". `object_changes` is a JSON map of field → [old, new]. `event` is create/update/destroy. CAVEAT: edits made through this API are all attributed to the shared API user, not to the person talking to you. Report
Find Shipment Flows
Find shipment flows — sales-pipeline opportunities, each describing a recurring shipment or trade lane for a customer (shipper → consignee, goods, expected revenue, sales stage). Use for "what is in the pipeline", "which opportunities are open at X", "show potentials above 50k". `salesStageId` and `divisionId` come from GetLookups; `companyId` from FindCompanies. DATE TRAP: `start_date` is a datetime (pass an ISO 8601 datetime for from/to) while `valid_until` on the same row is a plain cal
Find Contacts
Find a contact person (a person at a company) by name, company, department, or by phone number / email address. `contactContains` matches any of the person's communication values, so it answers "who is +49 40 …" and "whose address is @kunde.de". `functionId` is a contact function (Purchasing, Dispatch, …) from GetLookups. Use when the user names a PERSON rather than a company. For every contact at one company, prefer GetCompany — it returns them all. TRAP: `nameContains` matches the LAST n
Create Contact Report
Create a contact report — the record of a contact/visit/call with a customer. A contact report is a Document of type "document_contact_report": this creates the parent document and its nested contact-report detail in one call. Link it to a customer with `companyId` — look the company up first via FindCompanies and pass its id (the document attaches to that company's customer record). `headline` titles the document; `docDate` is the document date (ISO 8601 date, defaults to today, so it can b
Create Company
Create a new company. Pass the fields to set in `input` (at minimum `company_name`). `company_type` is the company's type by controller name. `errors` is empty on success; on validation failure `company` is null and `errors` lists what failed. Use when the user asks to create/add a new company.
Aggregate Shipments
Shipment money and counts — turnover, revenue, profit and shipment count — broken down along one or more axes. Switch an axis ON by passing its boolean; each axis you enable comes back under its own key, so asking for two at once returns both breakdowns in one call. Set at least one, or the response is empty. byPeriod -> one row per period (bucket: DAY | WEEK | MONTH | QUARTER | YEAR, default MONTH). "how did turnover develop", "revenue per month/quarter/year" byDivis
Create Event
Create a calendar event (appointment, todo, or holiday) and optionally link it to a customer. `type` picks the kind; `eventBegin`/`eventEnd` are ISO 8601 datetimes (eventEnd defaults to +30min for appointments, and is forced for todos/holidays, so it can be omitted). To connect the event to a customer, pass `companyIds` — look the company up first via FindCompanies and pass its id; the event links to that company's customer record(s). If you already have raw customer ids, use `customerIds`
Find Companies
Find / list / look up companies. All arguments optional; a null argument is ignored (the backend filter skips nil operator values), so any combination works. Use when the user asks to find, list or search companies. For full detail on ONE company — contacts, addresses, activity — call GetCompany with the id this returns. `query` is a fuzzy full-text search (find-as-you-type over the indexed fields) — use it when the user gives an approximate or misspelled name. `nameContains` is an exact s
Find Countries
Look up a country's id by name or ISO code. Needed because country ids are not in GetLookups (too many rows to inline). Pass `nameContains` for a name fragment ("German", "Deutsch") or `alpha2` for an ISO 3166-1 alpha-2 code ("DE", "NL"). Use when a request narrows companies or addresses to a country and you need its id. `nameContains` matches either language: the OR covers the German and English name, and when the variable is omitted both clauses fall away and impose no constraint. There i
Find Events
Find calendar events: appointments, todos and holidays. Answers "when did we last visit X", "what is scheduled with X", "which appointments are open", "what is on next week". TWO different "type" concepts, do not mix them: $kind — the event KIND enum: APPOINTMENT, TODO or HOLIDAY. $eventTypeId — the event's CATEGORY lookup row (Visit, Call, …), id from GetLookups. `from`/`to` bound `event_begin`, which is a datetime — pass ISO 8601 datetimes, not bare dates. Rows come back newest fir
Update Contact
Update an existing contact person by id. Only the fields you supply are changed — omitted variables are left untouched (GraphQL treats an unset variable as absent), so pass just what you want to edit. `companyId` re-assigns the contact to a different company (look it up first via FindCompanies), `salutationId` is the form of address, `title` an academic title, `department` the department, `isMainContact` marks the primary contact, and `info` holds free-text notes. `errors` is empty on succe
Get your MCP into directories
A working endpoint is step one. Directory coverage is the coordinated launch across ChatGPT, Claude, Cursor, the MCP Registry, and community indexes.
Directory coverage for brandsApollo exposes 26 public tools on this MCP endpoint.
Use the MCP endpoint listed on this page in your MCP client configuration. One-click install pills support Claude, Cursor, VS Code, and other hosts. Copy the remote MCP URL if your client needs a manual entry.
Operate Apollo? Verify ownership to take over this directory entry.
This server appears in the MCPBundles directory. Verify you operate it to take over the listing — name, description, logo, contact email, and skill content. We email a 6-digit code to a maintainer address your server publishes in /.well-known/security.txt or /.well-known/mcpbundles.json. Free, takes about a minute.
MCPBundles probed 26 tools on the live server. The tool list on this page reflects what was discovered at the last refresh — connect your client to see the full set available to your session.
No provider sign-in was required during MCPBundles' probe. Your client may still need MCPBundles credentials depending on how you connect.
MCPBundles is an independent platform built on the open Model Context Protocol standard. Not affiliated with Anthropic PBC or Claude.