Back to tracker
Plugin tracker
Tools
Explore what tracked Claude Connectors and ChatGPT Plugins can actually do. Search by tool, Plugin, Brand, category, verb, or access requirement.
Latest snapshot2026-09-11USmethodology registry-public-v1
Searchable tools
113,017
Authless tools
7,424
Auth required
100,766
Described tools
61,166
113,017 tools
- Checkpoint Listcheckpoint · List all checkpoints.SpritesFly.io
PluginrequiredDeveloper Tools - Checkpoint Restorecheckpoint · Restore to a specific checkpoint. Returns streaming NDJSON progress.SpritesFly.io
PluginrequiredDeveloper Tools - Create Spritecreate · Create a new sprite in the authenticated organization.SpritesFly.io
PluginrequiredDeveloper Tools - Destroy Spritedestroy · Destroy a sprite in the authenticated organization.SpritesFly.io
PluginrequiredDeveloper Tools - Execexec · Execute a command via simple HTTP POST (non-TTY only). Simpler alternative for exec for environments that can't handle websockets.SpritesFly.io
PluginrequiredDeveloper Tools - Exec Killexec · Kill an exec session by session ID. Returns streaming NDJSON with kill progress.SpritesFly.io
PluginrequiredDeveloper Tools - Exec Listexec · List active exec sessions.SpritesFly.io
PluginrequiredDeveloper Tools - File Copyfile · Copy a file or directory.SpritesFly.io
PluginrequiredDeveloper Tools - File Deletefile · Delete a file or directory.SpritesFly.io
PluginrequiredDeveloper Tools - File Listfile · List directory contents.SpritesFly.io
PluginrequiredDeveloper Tools - File Readfile · Read file contents from the sprite filesystem. Returns raw file bytes.SpritesFly.io
PluginrequiredDeveloper Tools - File Renamefile · Rename or move a file or directory.SpritesFly.io
PluginrequiredDeveloper Tools - File Writefile · Write file contents to the sprite filesystem. Request body contains raw file bytes.SpritesFly.io
PluginrequiredDeveloper Tools - List Spriteslist · List sprites for the authenticated organization.SpritesFly.io
PluginrequiredDeveloper Tools - Policy Network Getpolicy · Get the current network policy configuration.SpritesFly.io
PluginrequiredDeveloper Tools - Policy Network Updatepolicy · Update the network policy configuration.SpritesFly.io
PluginrequiredDeveloper Tools - Service Createservice · Create or update a service definition.SpritesFly.io
PluginrequiredDeveloper Tools - Service Getservice · Get details of a specific service.SpritesFly.io
PluginrequiredDeveloper Tools - Service Listservice · List all configured services and their current state.SpritesFly.io
PluginrequiredDeveloper Tools - Service Logsservice · Stream logs for a service.SpritesFly.io
PluginrequiredDeveloper Tools - Service Startservice · Start a service. Returns streaming NDJSON with stdout/stderr.SpritesFly.io
PluginrequiredDeveloper Tools - Service Stopservice · Stop a running service. Returns streaming NDJSON with service stop progress.SpritesFly.io
PluginrequiredDeveloper Tools - Browse & filter offers (advisor, one call)charter · THE discovery tool: filters the whole cached charter inventory (hundreds of hotels) in ONE call by date, TOTAL budget, stars, board, zone, party and hotel features (aquapark, kids club, adults-only, beach, spa, luxury…). Built for "I have X EUR for 2 adults + a child, Antalya, 5 stars, aquapark, near the beach — what do you suggest?". Returns the price range, three quality tiers (economy-but-good / mid / premium) and a shortlist; advise from the tiers, never only the cheapest. Pass the date whenever the user has one (exact availability for that date) and the real party (exact-party cache is used when present). excluded_unknown_features tells how many hotels were dropped because their facilities are unknown. CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Build a booking search linkbooking · Deep link into the live charter search results for a destination, date, party and optional trip length — hand this URL to the user to see live availability and book. Children are ages 0-14 at departure; ages 15+ count as adults. Pure URL builder (no data).Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Cheapest cached date in a windowcharter · For flexible travellers: the lowest CACHED package total for each departure date inside a window (max 31 days) for a destination and party, plus best_value_date. Dates with no cache are returned as availability_status=no_cached_data — NOT as "no offers" (the cache only holds recently searched dates; the search_url prices them live). CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Cheapest charter packages (live cache)charter · Cheapest flight+hotel charter packages from Tirana (Albania) per destination, from the live booking-engine cache (the 5 cheapest per destination, each on its own date). Use for "what is the cheapest…" only; for advice or filtering use charter_offers. CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Compare 2-6 hotels side by sidecompare · Side-by-side comparison of 2-6 named hotels for a date and party: cached price (with party_match + cached_at), stars, zone, board, room, features (aquapark, kids club, beach, spa, adults-only…) and a booking link each — one call instead of several charter_hotel calls. Hotels not in the cache are listed in not_found (do NOT say they are unavailable — the cache only holds recently searched offers). CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Full live-price digestprices · Today's full machine-readable price digest (charter packages, tours, guides, FAQ) — same content as https://flytravel.al/llms-full.txt (cached, rebuilt hourly). Overview only; for any specific hotel/date/party use the charter_* tools.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Holiday packages (bus/flight + hotel) — destinations & datesholiday · Our NON-charter holiday packages from Tirana (flight+hotel or bus+hotel: Corfu, Parga, Crete, Malta, Barcelona, Mallorca, Rimini…): which destinations are on sale right now, their validated upcoming departure dates, an INDICATIVE "from €X per person" price and the booking page link. The exact price depends on hotel/room/party and is computed live on the package page (link) — never present price_from as a bookable quote. For Turkey/Egypt beach charters (Antalya, Bodrum…) use the charter_* tools instead. Cached/validated data only, no live call.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Hotel facts (facilities, features)hotel · Static facts we hold about ONE charter hotel: stars, zone, provider-tagged categories, tri-state features (aquapark, kids_club, kids_pool, beach, private_beach, spa, adults_only, luxury, night_entertainment, water_slides — true/false/null where null = unknown), the facility list and a short description. FACTS ONLY: never claim a feature that is null/absent; distances to beach/airport are NOT available — do not estimate them. No prices here (use charter_hotel). Cache/DB read, no live call.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Organized group tours (cheapest first)tours · Escorted group tours from Tirana with Albanian-speaking guides (cached catalogue): stable id, title, days/nights, cities, transport, next_departure and the PER PERSON price in EUR — unlike charter packages, tour prices are per person. For one tour's full calendar, program and date-specific price use tour_details.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Organized tour details (dates, program, price)tour · Full cached details for ONE organized group tour: the COMPLETE departure-date calendar, the day-by-day program as text, duration, transport, and the per-person price. Match by `tour` (part of the name/cities, e.g. "Stamboll", "Milano Como") or exact `tour_id` from tours_list. Pass `date` + the party when the user has them: when that departure's group price is warm in cache you get the EXACT group total (price_status=cached_for_date); otherwise price_from is the PER PERSON price of the NEAREST departure (price_status=list_from) — every departure date has its OWN price, never quote one date's price for another; tour_page prices any date live. Answer date questions ONLY from departure_dates — it is the complete current calendar. Seats/availability are confirmed by staff. Cache/DB read, no live call.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Price for a specific hotel (live cache)charter · Cached price(s) for ONE hotel named by the user (e.g. "Granada Luxury Belek") — searches the full price cache (hundreds of hotels). ALWAYS pass the date and the party the user gave: the per-date cache is read for that EXACT party first (party_match=true = real total for that family), then the 2-adult file (party_match=false = reference price). exact_date_matches = real cached prices for the requested date; other_cached_offers belong to their OWN dates (availability_status=reference_other_date). When nothing is cached for the requested date, say so and give hotel_page (it prices any date live). Do NOT call this tool repeatedly to browse — use charter_offers (filters) or compare_hotels (2-6 named hotels) instead. For amenities use hotel_details. CACHED prices (from recent real searches on flytravel.al — not a live query; every row carries cached_at/age_minutes). Charter prices are PACKAGE TOTALS in EUR for the row's "party" (flight + hotel + transfers), NOT per person. party_match=false means the price is the 2-adult reference, not the total for the requested party — say so. A price belongs ONLY to its own "date": never present it as the price of another date.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Upcoming charter departure datescharter · Real upcoming charter departure dates from Tirana for a destination (cached calendar), each with the trip lengths (nights_available) really on sale for that departure and a ready booking-search link. Filter with date_from/date_to or month; total_count/has_more say when the calendar holds MORE dates than returned — never present a capped list as the whole calendar. For "which date is cheapest" use charter_flexible_dates.Fly Travel AlbaniaFly Travel Albania
PluginnoneTravel & Hospitality - Benötigte Chat-Eingaben abrufenget · Gibt den empfohlenen Fragepfad für das Gespräch zurück sowie die verbindliche Liste von Feldern, die NIEMALS aktiv abgefragt oder weitergegeben werden dürfen (forbidden_fields).EnergiefuchsEnergiefuchs
PluginnoneOperations - Energiefuchs-Tarife suchensearch · Listet die öffentlich verfügbaren Energiefuchs/FlexEnergy-Tarife (FlexPower Neo, FlexGas Neo). Bundesweit (Österreich) einheitlich verfügbar, keine PLZ-Filterung nötig. Nutze das stand-Feld (aktuelles, serverseitig berechnetes Datum) für 'Stand: {stand}', wenn du auf die Aktualität der Tarifdaten hinweisen willst. last_verified_at (innerhalb der Tarife) NIEMALS als 'zuletzt geprüft am' o. Ä. narrieren — das ist nur ein internes Datenpflege-Datum und wirkt fälschlich wie eine veraltete Prüfung, obwohl der Tarif weiterhin aktiv/gültig ist. NUR für die interne Auswahl/Weiterverarbeitung (z. B. welcher Tarif zu energy_type passt) — die Rohfelder (Grundgebühr, hf_ct_kwh_*, Vertragsbedingungen) NIEMALS direkt/aufgeschlüsselt an den Nutzer ausgeben, auch nicht bei 'finde mir einen passenden Tarif'. Stattdessen danach IMMER quote mit dem (geschätzten) Verbrauch aufrufen und die konkreten Kosten zeigen — wie bei 'was zahle ich bei Verbrauch X'.EnergiefuchsEnergiefuchs
PluginnoneOperations - FlexEnergy-Ratgeber durchsuchensearch · Durchsucht AUSSCHLIESSLICH den öffentlichen FlexEnergy-Ratgeber (flexenergy.at/ratgeber/*) — für spezifischere Hintergrundfragen jenseits von Tarifen/Preisschätzung (z. B. Wechselprozess, Strompreiszusammensetzung, Merit-Order, Smart Meter, PV-Einspeisung). NICHT für Preisfragen verwenden — dafür quote/search_tariffs nutzen. Liefert nur Titel + URL als Trefferliste; den eigentlichen Inhalt danach gezielt mit read_flexenergy_ratgeber_article laden.EnergiefuchsEnergiefuchs
PluginnoneOperations - FlexEnergy-Ratgeber-Artikel lesenread · Lädt den Inhalt eines konkreten FlexEnergy-Ratgeber-Artikels (URL aus search_flexenergy_ratgeber). Nur URLs unter flexenergy.at/ratgeber/ werden akzeptiert. WICHTIG: Der Inhalt stammt von FlexEnergy, NICHT von Energiefuchs selbst recherchiert — das MUSS beim Wiedergeben gegenüber dem Nutzer als Quelle kenntlich gemacht werden (z. B. 'Quelle: flexenergy.at'), niemals als eigene, unabhängige Aussage darstellen. Falls im Gespräch ein Link gezeigt wird, IMMER den zurückgegebenen source_url-Wert verwenden (enthält bereits Partner-Tracking-Parameter) — niemals die rohe Eingabe-URL ohne diese Parameter zeigen. KRITISCH: Für JEDE URL außerhalb von flexenergy.at/ratgeber/ (z. B. wienernetze.at oder andere Websites) gibt dieses Tool einen Fehler zurück — in dem Fall NIEMALS so tun, als wäre die Seite trotzdem gelesen worden, NIEMALS ein Zitat oder einen Inhalt von dort erfinden. Stattdessen dem Nutzer klar sagen, dass für diese Quelle kein Zugriff besteht.EnergiefuchsEnergiefuchs
PluginnoneOperations - Jahresverbrauch schätzenestimate · Schätzt den Jahresverbrauch, wenn der Nutzer ihn nicht kennt. Bei customer_type=gewerbe liefert dies einen festen Default-Wert (10.000 kWh Strom / 30.000 kWh Gas), der dem Nutzer explizit zur Bestätigung vorgelegt werden MUSS ("ist das für dich in Ordnung?") — niemals kommentarlos übernehmen. Bei customer_type=privat: persons für Strom, living_area_m2 (+ is_altbau) für Gas. Nenne dem Nutzer NUR estimated_annual_kwh plus die Bestätigungsfrage — NICHT das basis-Feld/die Herleitung vorrechnen (z. B. NICHT '3 Personen × 1.000 kWh + 500 kWh Sockel' erklären), das ist unnötiges Detail.EnergiefuchsEnergiefuchs
PluginnoneOperations - Kostenschätzung berechnenquote · Berechnet die Kostenschätzung für einen Energiefuchs-Tarif bei gegebenem/geschätztem Jahresverbrauch. Nenne dem Nutzer standardmäßig GENAU DIESE VIER fertigen Werte, sonst nichts: (1) annual_consumption_kwh als 'kWh' (zur Einordnung, welcher Verbrauch gemeint ist), (2) estimated_annual_total_net als 'Gesamt Jahr netto', (3) estimated_annual_total_gross als 'Gesamt Jahr brutto' (beide MIT Grundgebühr), (4) estimated_monthly_total_gross als 'monatlich (TZB brutto)' bzw. 'voraussichtlicher Monatspreis' (NICHT 'geschätzte Energiekosten' — das würde fälschlich suggerieren, die Grundgebühr sei nicht enthalten, ist sie aber bei ALLEN Werten außer den details enthalten). KRITISCH: Gib diese vier Werte 1:1 aus der API-Antwort wieder — NIEMALS den Rechenweg/die Formel vorrechnen oder Zwischenschritte zeigen (z. B. NICHT '10,41 + 5,8 = 16,21 ct/kWh, mal 3500 ...' schreiben), auch nicht, wenn search_tariffs vorher rohe Preiskomponenten geliefert hat. Zusätzlich das disclaimer-Feld unverändert weitergeben. Gib den disclaimer WORTWÖRTLICH wieder, NICHT umformulieren oder sinngemäß zusammenfassen — auch kleine Umformulierungen können falsche Aussagen erzeugen. Konkretes Beispiel eines bereits aufgetretenen Fehlers: 'nicht enthalten' wurde einmal zu 'werden separat verrechnet' umformuliert, was fälschlich eine getrennte Rechnung/einen anderen Anbieter suggeriert — FlexEnergy verrechnet tatsächlich alles auf einer gemeinsamen Rechnung. Die Einzelwerte unter details (Netto-/Brutto-Aufschlüsselung) nur nennen, wenn der Nutzer explizit danach fragt. Enthält KEIN Netzentgelt/Abgaben. KEIN Vergleich mit Preisen anderer Anbieter — stattdessen kurz auf den Mehrwert hinweisen. IMMER, sofort zusammen mit diesen Werten (nicht erst später, nicht nur auf Nachfrage) — egal ob es eine Wechsel- oder eine Neueinzugs-/Neuanmeldungs-Anfrage ist: NUR falls billing_cycle_options 'monthly' enthält (aktuell nur bei Strom, NICHT bei Gas — dort ist es technisch nicht möglich) auf die monatliche Verbrauchsabrechnung hinweisen — damit man immer nur das zahlt, was man tatsächlich verbraucht hat, keine ärgerliche Nachzahlung bei der Jahresabrechnung. Ein Satz reicht, aber NIEMALS weglassen, wenn monatliche Abrechnung verfügbar ist. Optional, knapp, danach: persönliches Verbrauchsprofil (jährliche Optimierung — nur als Leistungsversprechen erwähnen, keine konkreten Zahlen dazu erfinden). ALLE Regeln in dieser Beschreibung (die vier Standardwerte, kein Rechenweg, kein Vergleich) gelten IDENTISCH für Gas wie für Strom — nicht nur für Strom. NACH der Ausgabe dieser Werte AKTIV die Möglichkeit zur Wechselstrecke anbieten (z. B. 'Möchtest du direkt den Link zum Wechsel?') — nicht nur abwarten, ob der Nutzer selbst danach fragt. Das ist noch KEIN automatischer Aufruf von start_switch — dieses Tool erst aufrufen, wenn der Nutzer daraufhin zustimmt (siehe start_switch-Beschreibung, Kaufsignal).EnergiefuchsEnergiefuchs
PluginnoneOperations - Netzbetreiber nachschlagen (optional, nur reaktiv)lookup · NUR verwenden, wenn der Nutzer FREIWILLIG und UNAUFGEFORDERT seine Zählpunktbezeichnung genannt hat — dieses Feld niemals aktiv abfragen. Übergib den vom Nutzer genannten Wert unverändert. JEDE Länge zwischen 8 und 33 Zeichen ist gültig (z. B. AT001000, AT001000000 oder eine volle 33-stellige Zählpunktbezeichnung) — NICHT nur exakt 8 oder exakt 33. Das Backend extrahiert automatisch die ersten 8 Zeichen (AT + 6 Ziffern) und ignoriert den Rest. NIEMALS ablehnen oder nach der 'vollständigen 33-stelligen' Bezeichnung fragen, nur weil der genannte Wert weder 8 noch 33 Zeichen hat — einfach das Tool mit dem genannten Wert aufrufen. Liefert den Netzbetreiber-Namen (z. B. AT001000 → Wiener Netze) als interessante Zusatzinfo. WICHTIG bei NOT_FOUND: Die Referenzliste deckt ALLE Netzbetreiber Österreichs ab — ein nicht gefundenes Präfix bedeutet daher nicht 'uns unbekannt', sondern dass der genannte Wert zu KEINEM österreichischen Netzbetreiber gehört (z. B. Tippfehler oder keine echte österreichische Zählpunktbezeichnung). Das dem Nutzer genau so sagen, nicht vage lassen.EnergiefuchsEnergiefuchs
PluginnoneOperations - Wechsel zu FlexEnergy startenstart · Erzeugt einen getrackten Link zur offiziellen FlexEnergy-Wechselstrecke für den gewählten Tarif. WICHTIG (Name bewusst nicht 'checkout' o. Ä.): Hier wird KEIN Vertrag geschlossen und KEINE Zahlung verarbeitet — das Tool erzeugt nur den Einstiegslink. Der Nutzer sieht auf flexenergy.at die vollständigen Vertragsdetails, prüft sie und schließt den Energieliefervertrag dort eigenständig ab. Nur nach ausdrücklichem Nutzerwunsch aufrufen (z. B. "ja, den Wechsel starten", "ich will wechseln", "ich will mich anmelden"), nicht automatisch nach der Tarifempfehlung — aber SOBALD dieser Wunsch geäußert wird und PLZ/Verbrauch bereits bekannt sind, ist das ein starkes Kaufsignal: DANN SOFORT dieses Tool aufrufen, keine weiteren Zwischenschritte einbauen (z. B. NICHT nach der aktuellen Stromrechnung fragen, NICHT einen Preisvergleich anbieten — direkt den Link liefern). Gib AUSSCHLIESSLICH die PLZ weiter (falls bekannt) — niemals Name, Firmenname, E-Mail, Telefon, Geburtsdatum, Adresse, Zählpunkt oder IBAN. Der Nutzer füllt seine Daten eigenständig auf flexenergy.at aus — das ist Absicht (mehr Bindung an den Abschluss). WICHTIG: Wenn der Nutzer zusätzlich ein verbotenes Feld nennt (z. B. E-Mail), dieses Feld einfach WEGLASSEN und das Tool TROTZDEM mit den erlaubten Feldern aufrufen, um den echten Link zu bekommen. NIEMALS das Aufrufen dieses Tools verweigern oder einen alternativen/erfundenen Link oder 'Beratungsprozess' vorschlagen — es gibt KEINEN anderen gültigen Einstiegspunkt als den checkout_url-Wert aus diesem Tool. Den Link als Markdown-Link mit kurzem, klarem Text einfügen (z. B. '[Zum Wechsel](checkout_url)' oder '[Zur Anmeldung](checkout_url)') — NIEMALS die rohe URL sichtbar in den Text schreiben.EnergiefuchsEnergiefuchs
PluginnoneOperations - Add Companies To Targetingadd · Bulk version of add_company_to_targeting: add many companies to one RealtyAds account's targeted-firms list in a single call. Each entry needs a company_name; linkedin_company_url and/or linkedin_company_id are strongly recommended for an immediate match.
Use this tool when the user wants to add several companies to a RealtyAds account's targeted-firms list in one go (e.g. "target these 10 companies", or running through a list pasted from a spreadsheet). Per-entry behavior is identical to add_company_to_targeting.
Required:
- account_id: the RealtyAds property account that should target the companies. Must be an account the caller has access to.
- companies: a JSON array of objects, each containing:
- company_name (required): used verbatim as firm_name (max 150 chars).
- linkedin_company_url (optional, recommended): "https://www.linkedin.com/company/jll/" or just "/company/{slug}".
- linkedin_company_id (optional, recommended): numeric LinkedIn company id.
Up to 100 entries per call.
Behavior per entry (same as add_company_to_targeting):
- When a LinkedIn id is supplied or resolved from the URL, writes a fully-matched row immediately and clears any matching exclusion / partner-pursuit / partner-integration suppression flags.
- When only a name is supplied, writes a lightweight row and lets the matching cron resolve the LinkedIn record on its next pass.
- Idempotent on (account_id, linkedin_company_id): duplicates return action_taken="already_targeted" without creating extra rows.
Errors are per-entry, not per-batch. A bad row (e.g. empty company_name) returns action_taken="failed" with an "error" string for that entry; the rest of the batch still runs. The top-level response carries counts (added / already_targeted / failed) so the caller can see at a glance what happened.
Each entry's response carries the input position (`index`) plus the same fields the singular tool returns (action_taken, targeted_firm_id, linkedin_company_id, matched_via, canonical_company_name, queued_for_matching).
This is a WRITE action. Every successful add is logged in the portal activity feed under the calling user.RealtyAdsRealtyAds
PluginrequiredMarketing - Add Company To Targetingadd · Add one company to a RealtyAds account's targeted-firms list so the ad system starts targeting decision-makers at that company. company_name is required; linkedin_company_url and/or linkedin_company_id are strongly recommended for an immediate match.
Use this tool when the user wants to start targeting a specific company through their RealtyAds account. The company is added to the same targeted-firms list the portal's "Company Targeting" UI writes to.
Required:
- account_id: the RealtyAds property account that should target this company. Must be an account the caller has access to.
- company_name: the company name to add. Used verbatim as the firm_name on the row.
Strongly recommended (provide whatever you have — both is fine):
- linkedin_company_url: a full LinkedIn URL like "https://www.linkedin.com/company/jll/" or a "/company/{slug}" tail. The slug can be a vanity name ("jll") or a numeric id.
- linkedin_company_id: numeric LinkedIn company id, when you already know it from search_companies, lookup_company_information, get_companies_reached, etc.
When a LinkedIn id is supplied (or resolved from the URL via our local cache), the row is written fully matched so ad delivery picks it up immediately, the company is removed from any active exclusion list, and partner-pursuit / partner-integration "do not target" flags for the same company are cleared. When only a name is supplied, the row is queued for the matching cron — typically resolved within an hour, but the company isn't actively targeted until then.
Returns:
- action_taken: "added", "already_targeted", or (rare) an error message
- targeted_firm_id: the id of the new row in realty_client_targeted_firms (or the existing active row, when already_targeted)
- account_id, company_name, canonical_company_name
- linkedin_company_id: the id used on the row, when resolved
- matched_via: "linkedin_company_id" | "linkedin_company_url_numeric" | "linkedin_company_url" | "name_only"
- queued_for_matching: true when we wrote a name-only row that the cron still needs to match
Idempotent on the (account_id, linkedin_company_id) pair: re-adding a company that's already actively targeted returns action_taken="already_targeted" and does not create a duplicate row. Re-adding by name alone (no LinkedIn id) does not de-duplicate — every name-only call creates a fresh row, matching the portal's "manual entry" precedent.
This is a WRITE action. It is logged in the portal activity feed under the calling user.RealtyAdsRealtyAds
PluginrequiredMarketing - Add Contact To Targetingadd · Add one contact to a RealtyAds account's targeted-users list so the ad system starts targeting that person. Clears an existing per-contact exclusion when present. Provide at least one of: contact_id, linkedin_profile_url, work_email, personal_email, cell_phone, or the trio first_name + last_name + company_name.
Use this tool when the user wants to start targeting a specific individual through their RealtyAds account. The contact is added to the same targeted-users list the portal's "Decision-Maker Targeting" UI writes to, and ads from this account will start including them.
Required:
- account_id: the RealtyAds property account that should target this contact. Must be an account the caller has access to.
- exactly one of the identifier groups below.
Identifier groups (provide whichever you have — more specific is better):
- contact_id: internal RealtyAds contact id (e.g. from lookup_contact_information, get_company_decision_makers, get_website_visitors)
- linkedin_profile_url: full LinkedIn URL like "https://www.linkedin.com/in/jane-smith/" or the "linkedin.com/in/jane-smith" tail. We synchronously look the profile up so the contact is fully populated before being added.
- work_email: e.g. "[email protected]"
- personal_email: e.g. "[email protected]"
- cell_phone: digits-only is fine; we normalize for matching.
- first_name + last_name + company_name: all three required if you go this route. Optional context (job_title, city, state) improves the stub record we create when no existing match is found.
If the contact is already on file we attach the targeting row to that record. If they're not on file, we create a new contact record from the fields you provided and attach to that — background enrichment will then fill in additional details over the next few minutes.
If the contact was previously on the account's exclusion list, that exclusion is cleared.
Returns:
- action_taken: "added" or "already_targeted"
- targeting_user_id: id of the new row on the targeting list (or the existing row, when already_targeted)
- audience_data_contact_id: internal contact id used on the targeting row
- account_id, first_name, last_name, job_title, company_name, linkedin_profile_url
- resolved_via: which input identifier matched — "contact_id", "linkedin_profile_url", "work_email", "personal_email", "cell_phone", "name_and_company", or "created_new_contact"
- created_stub_contact: true when no existing contact matched and we created a new record
- message: short human-readable summary
Idempotent on the (account_id, audience_data_contact_id) pair: re-adding a contact that's already actively targeted returns action_taken="already_targeted" and does not create a duplicate row.
This is a WRITE action. It is logged in the portal activity feed under the calling user.RealtyAdsRealtyAds
PluginrequiredMarketing - Add Contacts To Targetingadd · Bulk version of add_contact_to_targeting: add many contacts to one RealtyAds account's targeted-users list in a single call. Per-entry behavior matches the singular tool — supply at least one identifier (contact_id, linkedin_profile_url, work_email, personal_email, cell_phone, or name+company).
Use this tool when the user wants to add multiple contacts to a RealtyAds account's targeted-users list in one go — for example after pasting a CSV of contacts they want targeted, or applying a list of decision-makers exported from another system. Per-entry behavior is identical to add_contact_to_targeting.
Required:
- account_id: the RealtyAds property account. Must be an account the caller has access to.
- contacts: a JSON array of objects (up to 100 entries). Each entry needs at least one of:
- contact_id (internal RealtyAds contact id)
- linkedin_profile_url (full URL or "linkedin.com/in/..." tail)
- work_email
- personal_email
- cell_phone
- first_name + last_name + company_name (all three required when going this route)
Optional context fields per entry: job_title, city, state — used to populate the contact stub when no existing match is found.
Per-entry behavior (same as add_contact_to_targeting):
- Resolves the contact via the priority order above (contact_id → linkedin_profile_url → work_email → personal_email → cell_phone → name+company).
- When no existing contact matches, creates a stub audience_data.contacts row from the supplied fields and attaches the targeting row to it.
- Idempotent on (account_id, audience_data_contact_id): re-adding an already-targeted contact returns action_taken="already_targeted" without creating duplicates.
- Clears the contact from the account's exclusion list when present.
- Logs "Updated Decision-Maker Targeting" / "Added a decision-maker to targeting" with action_source="mcp".
Errors are per-entry, not per-batch. A bad row (no identifier supplied, etc.) returns action_taken="failed" with an "error" string. The top-level response carries counts (added / already_targeted / failed) so the caller can see at a glance what happened.
This is a WRITE action. Every successful add is logged under the calling user and shows up in the portal activity feed.RealtyAdsRealtyAds
PluginrequiredMarketing - Add Custom Job Title To Targetingadd · Add one custom job title to the targeted-job-title list for a RealtyAds account so decision-makers with that title at the account's target companies become eligible to see ads. Looks up the LinkedIn title id from a job-title name when one is not supplied.
Use this tool when the user wants RealtyAds AI to specifically target a job title across the account's target companies — "add VP of Real Estate to our job-title targeting", "we want to reach Heads of Workplace", "target Chief People Officers".
What it does (mirrors the portal):
- Looks up the LinkedIn-canonical title id from the supplied name (cached typeahead; falls back to live LinkedIn API when cache is cold).
- Skips silently if the title is already on the account's targeting list (idempotent).
- INSERTs into r1.realty_client_targeted_job_titles.
- Logs to r1.user_change_log under "Updated Job Title Targeting" with action_source="mcp". The portal itself does not log this action — MCP writes are logged for AI auditability.
Required:
- account_id: the RealtyAds property account. Must be an account the caller has access to.
- title_name: the job title to add (e.g. "VP of Real Estate"). Should be a common LinkedIn-style title — uncommon phrasings may not resolve to a LinkedIn id.
Optional:
- title_id: the LinkedIn title id (numeric tail of `urn:li:title:<n>`, as a string). Use when you already know it (e.g. from a prior `add` response's `title_id`). When omitted, the tool will look it up by name.
Returns:
- action_taken: "added", "already_targeted", or "no_match" (if the typeahead couldn't resolve a title id)
- row_id, account_id, title_id, title_name
- matched_via: "explicit_title_id" / "linkedin_cache" / "linkedin_api"
- candidates: up to 5 alternative typeahead matches (returned only when there's ambiguity, so the caller can confirm the right one was picked)
- message: short human-readable summary
Pair with `get_ad_targeting` (which lists current job titles in `filters.job_titles`, each with a `row_id`) and `remove_custom_job_title_from_targeting` (which takes the row_id).
This is a WRITE action.RealtyAdsRealtyAds
PluginrequiredMarketing - Add Geography To Targetingadd · Add one geography (city / metro / region) to the targeted-geographies list for a RealtyAds account so people and companies in that geography become eligible to see ads. Looks up the LinkedIn geo id from a name when one is not supplied.
Use this tool when the user wants to expand targeting to a new geography — "also target tenants in Jersey City", "add Greenwich, Connecticut to our targeting", "we want to reach brokers in Atlanta".
What it does (mirrors the portal):
- Looks up the LinkedIn-canonical geo id from the supplied name (cached typeahead; falls back to live LinkedIn API when cache is cold).
- Skips silently if the geography is already on the account's targeting list (idempotent on (account, geo_id)).
- INSERTs into r1.realty_client_targeted_geos with `target_cre=1, target_companies=1` by default (matching the portal default — geo applies to both broker reach and company reach).
- Logs to r1.user_change_log under "Updated Geography Targeting" with action_source="mcp". The portal itself does not log this action — MCP writes are logged for AI auditability.
Required:
- account_id: the RealtyAds property account. Must be an account the caller has access to.
- geo_name: the geography to add. Be as specific as possible — "Atlanta, Georgia, United States" resolves more reliably than just "Atlanta".
Optional:
- geo_id: the LinkedIn geo id (numeric tail of `urn:li:geo:<n>`, as a string). Use when you already know it.
- target_cre: (default true) include this geography when targeting commercial real-estate brokers.
- target_companies: (default true) include this geography when targeting companies / decision-makers.
Both can be set to false, but at least one should be true or the row has no effect.
Returns:
- action_taken: "added", "already_targeted", or "no_match" (if the typeahead couldn't resolve a geo id)
- row_id, account_id, geo_id, geo_name, target_cre, target_companies
- matched_via: "explicit_geo_id" / "linkedin_cache" / "linkedin_api"
- candidates: up to 5 alternative typeahead matches (returned only when there's ambiguity)
- message: short human-readable summary
Pair with `get_ad_targeting` (which lists current geos in `geography.submarkets`, each with a `row_id`) and `remove_geography_from_targeting` (which takes the row_id).
This is a WRITE action.RealtyAdsRealtyAds
PluginrequiredMarketing - Add Media To Libraryadd · Add a file to the account's media library from a public http(s) URL. Additive — it never deletes or overwrites existing media. Returns the new asset's id and CDN URL.
Fetches the file at source_url (a public http(s) URL) and stores it in the account's media library. Optionally attach a short description and tags to help the user find it later.
This is additive — it never deletes or overwrites existing media. Use list_media_library to see what is already there. Returns the new media_id, cdn_url, and media_type. This is a WRITE action.RealtyAdsRealtyAds
PluginrequiredMarketing - Check Targeting Statuscheck · Definitive check whether a specific contact or company is on an account's active target list, exclusion list, or neither.
Returns a boolean membership result — no list scanning needed. Always prefer this over searching get_ad_targeting results when you need to verify a single entity's targeting status (get_ad_targeting lists are capped, so absence from that sample does not prove an entity is untargeted).
Provide account_id plus at least one of contact_id (checks the individual target/exclusion lists) or linkedin_company_id (checks the company target/exclusion lists). You may pass both. The response includes on_target_list / on_exclusion_list booleans and, for companies, previously_targeted (soft-removed) plus target/exclusion detail blocks when present.RealtyAdsRealtyAds
PluginrequiredMarketing
What is Tool Explorer?
Tool Explorer indexes the callable tool names and descriptions attached to public registry profiles. It is useful for seeing what agents can actually invoke, not just which profile exists.
How do category and verb filters work?
Category filters use the live registry category rollup. Verb filters use the public tool insights rollup, so the page stays backed by the same read models as the tracker charts.
Why do auth requirements matter?
Auth requirements show whether a tool is likely usable without account connection, requires authentication, is private, or is unknown in the current snapshot.