FirmLedger
by firmledger.co.ke · remote · no sign-in to list tools · v1.0.2 · published by ke.co.firmledger
FirmLedger: search and verify businesses. Free needs no key; Pro adds contacts, news, jobs.
49 tools: 8 can delete or cancel things, 2 do something that can't be undone, 17 change things and 22 only read.
Scanned Oct 21, 2026
- Deletes or cancels8Claude Code: deny: see these tools
- Can't be undone2Claude Code: ask: see these tools
- Changes things17Claude Code: ask: see these tools
- Only reads22Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http firmledger https://mcp.firmledger.co.ke/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
49 tools
Deletes or cancels 8Claude Code: deny
manage_api_keysCreate an API key (the raw key is returned once), revoke a key, or change a key's scopes — the dashboard's Developer API controls.No findings
Why it is in this group
- The description's first verb is "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create an API key (the raw key is returned once), revoke a key, or change a key's scopes — the dashboard's Developer API controls. Requires the user's confirmation. Keys can also carry the AI-assistant scopes (read:account / write:account) that this connector uses.
Annotations the server declares
- title: Manage my API keys
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
manage_jobManage a job owned by the member: edit its title, type, location, apply link or description, close it, or permanently remove it.No findings
Why it is in this group
- The description says "permanently remove".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Manage a job owned by the member: edit its title, type, location, apply link or description, close it, or permanently remove it. Editing a live or closed role returns it to moderation before it is public again. Requires the user’s confirmation.
Annotations the server declares
- title: Edit, close or remove my job
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
manage_leadArchive a conversation out of the business inbox, restore it, or delete it permanently — the dashboard's conversation controls.No findings
Why it is in this group
- The description's first verb is "archive": a word for removing or ending something.
- The description says "irreversible".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Archive a conversation out of the business inbox, restore it, or delete it permanently — the dashboard's conversation controls. Requires the user's confirmation (deleting is irreversible).
Annotations the server declares
- title: Archive, restore or delete a lead conversation
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
manage_webhooksCreate, update, pause, resume, rotate the signing secret of, test, retry a delivery for, or delete a webhook destination on the user's account — the same operations as Dashboard → …No findings
Why it is in this group
- The description's first verb is "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create, update, pause, resume, rotate the signing secret of, test, retry a delivery for, or delete a webhook destination on the user's account — the same operations as Dashboard → Developer API. Secrets come back only for create and rotate. Requires the user's confirmation.
Annotations the server declares
- title: Manage my webhook destinations
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
request_listing_removalSend a removal request for a listing the user owns or originally submitted.No findings
Why it is in this group
- The name "request_listing_removal" says "request": a word for a change.
- The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Send a removal request for a listing the user owns or originally submitted. A moderator reviews it; nothing is removed until they accept. Requires the user's confirmation.
Annotations the server declares
- title: Request removal of my listing
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
revoke_connectionDisconnect this assistant from the member's FirmLedger account.No findings
Why it is in this group
- The name "revoke_connection" says "revoke": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Disconnect this assistant from the member's FirmLedger account. The sign-in is revoked on FirmLedger's side at once, and every token it issued stops working. Call it when the member asks to remove, sign out or disconnect their account. It cannot erase the token stored in the member's assistant app, so tell the member to remove the FirmLedger connector there as well.
Annotations the server declares
- title: Remove the FirmLedger account connection
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
set_lead_statusMove a lead in the user's business inbox to new, contacted, qualified, won or lost.No findings
Why it is in this group
- The name "set_lead_status" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Move a lead in the user's business inbox to new, contacted, qualified, won or lost. Requires the user's confirmation.
Annotations the server declares
- title: Change a lead's status
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
watchlist_removeRemove a company from the user's watchlist.No findings
Why it is in this group
- The name "watchlist_remove" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Remove a company from the user's watchlist. Requires the user's confirmation.
Annotations the server declares
- title: Remove a company from my watchlist
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Can't be undone 2Claude Code: ask
reply_to_leadSend a reply in one of the user's lead conversations, exactly as the Reply box on the website does (the other party is notified).No findings
Why it is in this group
- The name "reply_to_lead" says "reply": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Send a reply in one of the user's lead conversations, exactly as the Reply box on the website does (the other party is notified). Requires the user's confirmation: the first call returns the exact message for them to approve.
Annotations the server declares
- title: Reply to a lead
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
reply_to_ticketSend a reply in one of the user's own support tickets — the same thread the dashboard shows, and the same message an agent answers.No findings
Why it is in this group
- The name "reply_to_ticket" says "reply": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Send a reply in one of the user's own support tickets — the same thread the dashboard shows, and the same message an agent answers. Closed tickets cannot take replies. Requires the user's confirmation of the exact text.
Annotations the server declares
- title: Reply to an open support ticket
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Changes things 17Claude Code: ask
check_domainFirmLedger Pro.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it FirmLedger Pro. Given a website domain or URL, report whether an approved FirmLedger record uses it and return that record — useful for "is this site legit?" questions.
Annotations the server declares
- title: Check whether a website is listed (Pro)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
create_support_ticketOpen a FirmLedger support ticket for the user.No findings
Why it is in this group
- The name "create_support_ticket" says "create": a word for a change.
Description, as the server wrote it Open a FirmLedger support ticket for the user. Categories: billing, technical, listing, account, verification, other. Requires the user's confirmation of the exact subject and message.
Annotations the server declares
- title: Open a support ticket
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
create_webhookRegister a webhook on the user’s account after explicit confirmation.No findings
Why it is in this group
- The name "create_webhook" says "create": a word for a change.
Description, as the server wrote it Register a webhook on the user’s account after explicit confirmation. Listing events will be sent to this URL. Requires Pro (including a free trial) and write:account. The signing secret is returned only once; keep it private.
Annotations the server declares
- title: Create a webhook destination
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
export_watchlist_csvThe user's watchlist as CSV text (name, category, type, location, contact details, tech stack, verified owner, confidence, watched since) — the same file as the dashboard's Export …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it The user's watchlist as CSV text (name, category, type, location, contact details, tech stack, verified owner, confidence, watched since) — the same file as the dashboard's Export button.
Annotations the server declares
- title: Export my watchlist as CSV
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
mark_notifications_readMark one notification (notification_id) or all of them (all: true) as read.No findings
Why it is in this group
- The name "mark_notifications_read" says "mark": a word for a change.
Description, as the server wrote it Mark one notification (notification_id) or all of them (all: true) as read. Requires the user's confirmation.
Annotations the server declares
- title: Mark notifications as read
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
post_jobSubmit a job opening on one of the user's listings (the listing needs active Pro perks; up to 5 open or pending roles).No findings
Why it is in this group
- The name "post_job" says "post": a word for a change.
Description, as the server wrote it Submit a job opening on one of the user's listings (the listing needs active Pro perks; up to 5 open or pending roles). Like the dashboard form, it goes to moderation first and is published after approval. Requires the user's confirmation.
Annotations the server declares
- title: Post a job on my listing
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
prepare_advertisingDoes NOT charge anything.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Does NOT charge anything. Checks that the listing belongs to this account and is approved, then returns a personal link to FirmLedger's own checkout for the chosen Sponsored-placement package. The user reviews and pays there themselves; you can never complete or confirm a payment. If the user says "yes, do it", give them the link again.
Annotations the server declares
- title: Prepare a FirmLedger advertising checkout link
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
prepare_listing_claimFree.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Free. Prepare a link to claim an approved listing using DNS TXT, HTML meta tag or site badge. Creates nothing and never grants ownership. The user signs in, generates a token, installs the proof on the business domain and verifies it on FirmLedger.
Annotations the server declares
- title: Prepare a listing ownership claim
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
prepare_listing_submissionDoes NOT create anything.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Does NOT create anything. Returns a link to the real FirmLedger submission form with the company name, website and (optional) category, country and city pre-filled. The user opens it, signs in, completes the remaining fields, reviews everything and submits it themselves. Also reports if the company is already listed, so nothing is submitted twice.
Annotations the server declares
- title: Prepare a FirmLedger listing submission link
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
prepare_upgradeDoes NOT charge anything.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Does NOT charge anything. Returns a personal link to FirmLedger's own checkout for the chosen Pro plan (optionally with a promo code). The user opens it, signs in, reviews the order on FirmLedger and pays on the secure Lemon Squeezy checkout themselves. You can never complete or confirm a payment and must never ask for card details; if the user says "yes, do it", give them the link again. Without an API key it returns the pricing page instead.
Annotations the server declares
- title: Prepare a FirmLedger Pro checkout link
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
refresh_listing_newsLook for new coverage of one of the user's approved listings with the same accuracy rules and moderation as the dashboard's "Refresh news" (once a minute per listing).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Look for new coverage of one of the user's approved listings with the same accuracy rules and moderation as the dashboard's "Refresh news" (once a minute per listing). Requires the user's confirmation.
Annotations the server declares
- title: Refresh my listing's news
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
refresh_listing_scoresRecompute the confidence, health and completeness scores of one of the user's listings from its current record — the dashboard's "Re-align scores".No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Recompute the confidence, health and completeness scores of one of the user's listings from its current record — the dashboard's "Re-align scores". Requires the user's confirmation.
Annotations the server declares
- title: Refresh my listing's scores
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
refresh_listing_techScan the website of one of the user's listings and refresh its technology snapshot — the dashboard's "Refresh tech".No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Scan the website of one of the user's listings and refresh its technology snapshot — the dashboard's "Refresh tech". Requires the user's confirmation.
Annotations the server declares
- title: Refresh my listing's technology snapshot
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
request_authenticationConnect this assistant to the member's own FirmLedger account by sign-in (OAuth), or renew or replace that connection.No findings
Why it is in this group
- The name "request_authentication" says "request": a word for a change.
Description, as the server wrote it Connect this assistant to the member's own FirmLedger account by sign-in (OAuth), or renew or replace that connection. Call it when the member says "connect me to my account", "sign me in", or asks to switch accounts. The assistant opens FirmLedger in the browser, the member approves there, and no password or key passes through the chat. mode "connect" (the default) starts sign-in when the connection needs it. mode "reauthenticate" ends the current connection so the member can choose the account again. mode "refresh" renews a sign-in token that is about to expire, and the assistant should then retry.
Annotations the server declares
- title: Connect or renew the FirmLedger account
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
start_leadStart a new FirmLedger Leads conversation with another approved, claimed business.No findings
Why it is in this group
- The name "start_lead" says "start": a word for a change.
Description, as the server wrote it Start a new FirmLedger Leads conversation with another approved, claimed business. The signed-in member email is used automatically, the business email stays private, and the owner is notified in their Leads inbox. Requires the user’s confirmation of the exact inquiry.
Annotations the server declares
- title: Contact a claimed business
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
update_my_listingChange fields on a listing the user owns (name, tagline, description, website, email, phone, country, city, region, address, logo_url, founded, size, tags, socials) — the same serv…No findings
Why it is in this group
- The name "update_my_listing" says "update": a word for a change.
Description, as the server wrote it Change fields on a listing the user owns (name, tagline, description, website, email, phone, country, city, region, address, logo_url, founded, size, tags, socials) — the same service the dashboard edit form and PUT /api/v1/my/listings/:id use, including the re-moderation rule when the core record changes. Requires the user's confirmation.
Annotations the server declares
- title: Edit one of my listings
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
watchlist_addAdd an approved company to the user's watchlist so they are notified when its record changes.No findings
Why it is in this group
- The name "watchlist_add" says "add": a word for a change.
Description, as the server wrote it Add an approved company to the user's watchlist so they are notified when its record changes. Requires the user's confirmation.
Annotations the server declares
- title: Add a company to my watchlist
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 22Claude Code: allow
compare_listingsCompare 2 to 4 approved FirmLedger companies side by side: entity type, category, location, founded, team size, website, tagline, date registered, ownership, tick, confidence and s…No findings
Why it is in this group
- The name "compare_listings" says "compare": a word for reading.
Description, as the server wrote it Compare 2 to 4 approved FirmLedger companies side by side: entity type, category, location, founded, team size, website, tagline, date registered, ownership, tick, confidence and sponsored status — the same rows as the FirmLedger comparison page. Use after search_listings when the user wants to weigh companies against each other.
Annotations the server declares
- title: Compare FirmLedger listings side by side
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
connection_statusReport what this FirmLedger connection can do: Free or Pro access, authentication and active free-trial status, and which tools and fields are available.No findings
Why it is in this group
- The name "connection_status" says "status": a word for reading.
Description, as the server wrote it Report what this FirmLedger connection can do: Free or Pro access, authentication and active free-trial status, and which tools and fields are available. Use when the user asks why something is locked.
Annotations the server declares
- title: Check FirmLedger connection access
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_analyticsAudience analytics for the user's own listings — views today/7/30 days/total, distinct hashed visitor signals, profile and website clicks, leads, the 30-day funnel (placements serv…No findings
Why it is in this group
- The name "get_analytics" says "get": a word for reading.
Description, as the server wrote it Audience analytics for the user's own listings — views today/7/30 days/total, distinct hashed visitor signals, profile and website clicks, leads, the 30-day funnel (placements served and browser-measured viewable impressions are separate), top locations and per-listing views. The same numbers as Dashboard → Audience analytics.
Annotations the server declares
- title: Read my audience analytics
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_api_statusThe state of the FirmLedger REST API for this account and API key, as /api/v1/me and /api/v1/usage answer it: identity, plan and free-trial status, the key's scopes, live per-minut…No findings
Why it is in this group
- The name "get_api_status" says "get": a word for reading.
Description, as the server wrote it The state of the FirmLedger REST API for this account and API key, as /api/v1/me and /api/v1/usage answer it: identity, plan and free-trial status, the key's scopes, live per-minute read/write budgets, durable usage aggregates and the endpoint catalogue. Also states plainly that the MCP connector and REST API v1 are the same platform API — one account, one key, one Pro entitlement — and exactly what happens to API and MCP access when a free trial ends.
Annotations the server declares
- title: REST API v1 status for this key
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_connection_statusReport how this assistant is connected to FirmLedger: public (no sign-in), an API key, or the member's account through sign-in (OAuth).No findings
Why it is in this group
- The name "get_connection_status" says "get": a word for reading.
Description, as the server wrote it Report how this assistant is connected to FirmLedger: public (no sign-in), an API key, or the member's account through sign-in (OAuth). Shows Free or Pro, the trial status, which tools and fields are available, and whether the sign-in token is about to expire. Use it when the member asks whether they are connected or signed in, or why something is locked.
Annotations the server declares
- title: Get FirmLedger connection status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_leadOne conversation from the Leads inbox with the inquirer's details and every message, oldest first.No findings
Why it is in this group
- The name "get_lead" says "get": a word for reading.
Description, as the server wrote it One conversation from the Leads inbox with the inquirer's details and every message, oldest first. Use before reply_to_lead so the reply fits the thread.
Annotations the server declares
- title: Read one lead conversation
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_listingThe public FirmLedger profile of one company: description, category, location, verification state (tick, how ownership was proved, when it was last checked), confidence and health …No findings
Why it is in this group
- The name "get_listing" says "get": a word for reading.
Description, as the server wrote it The public FirmLedger profile of one company: description, category, location, verification state (tick, how ownership was proved, when it was last checked), confidence and health scores, sources, recent moderated news headlines and the open jobs count. With FirmLedger Pro it also includes website, email, phone, social links, key people, timeline and technology — the same line the website draws.
Annotations the server declares
- title: Get a FirmLedger company profile
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_my_listingsThe listings this account owns or submitted, with moderation status, tick, scores, Pro perks, sponsorship, jobs and new-lead counts.No findings
Why it is in this group
- The name "get_my_listings" says "get": a word for reading.
Description, as the server wrote it The listings this account owns or submitted, with moderation status, tick, scores, Pro perks, sponsorship, jobs and new-lead counts. Use first when the user refers to "my listing".
Annotations the server declares
- title: List my FirmLedger listings
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_newsFirmLedger Pro.No findings
Why it is in this group
- The name "get_news" says "get": a word for reading.
Description, as the server wrote it FirmLedger Pro. Recent moderated news headlines about one company with dates, publishers and links — the same accuracy-gated stories shown on the profile's news panel.
Annotations the server declares
- title: Get moderated company news (Pro)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_notificationsThe user's in-app FirmLedger notifications, newest first, with the unread count.No findings
Why it is in this group
- The name "get_notifications" says "get": a word for reading.
Description, as the server wrote it The user's in-app FirmLedger notifications, newest first, with the unread count. Set unread_only for just the unread ones.
Annotations the server declares
- title: Read my notifications
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_relationshipsFirmLedger Pro.No findings
Why it is in this group
- The name "get_relationships" says "get": a word for reading.
Description, as the server wrote it FirmLedger Pro. The recorded relationship graph of one company: founders, investors, parent companies, subsidiaries, products, services and partners — plus the reverse edges (companies it founded or invested in). Only relationships recorded by the verified owner or moderators; nothing is inferred.
Annotations the server declares
- title: Get a company's relationship graph (Pro)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_watchlistThe companies the user watches on FirmLedger, newest first.No findings
Why it is in this group
- The name "get_watchlist" says "get": a word for reading.
Description, as the server wrote it The companies the user watches on FirmLedger, newest first.
Annotations the server declares
- title: Read my watchlist
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_ad_packagesThe current Sponsored-placement advertising packages with price, billing and duration.No findings
Why it is in this group
- The name "list_ad_packages" says "list": a word for reading.
Description, as the server wrote it The current Sponsored-placement advertising packages with price, billing and duration. With an API key it also lists the user's own listings and which of them can be advertised or are already sponsored. Use before prepare_advertising.
Annotations the server declares
- title: List FirmLedger advertising packages
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_api_keysThe account's API keys with label, prefix, scopes, usage totals and last use — never a raw key.No findings
Why it is in this group
- The name "list_api_keys" says "list": a word for reading.
Description, as the server wrote it The account's API keys with label, prefix, scopes, usage totals and last use — never a raw key. Use it to name a key before revoking or re-scoping it.
Annotations the server declares
- title: List my API keys
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_categoriesEvery FirmLedger category with its number of approved listings.No findings
Why it is in this group
- The name "list_categories" says "list": a word for reading.
Description, as the server wrote it Every FirmLedger category with its number of approved listings. Use to pick a valid category for search_listings.
Annotations the server declares
- title: List FirmLedger categories
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_countriesThe countries present in the FirmLedger directory, each with its number of approved listings.No findings
Why it is in this group
- The name "list_countries" says "list": a word for reading.
Description, as the server wrote it The countries present in the FirmLedger directory, each with its number of approved listings.
Annotations the server declares
- title: List countries on FirmLedger
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_jobsFirmLedger Pro.No findings
Why it is in this group
- The name "list_jobs" says "list": a word for reading.
Description, as the server wrote it FirmLedger Pro. Open roles at approved FirmLedger companies, filtered by company and/or location and keyword: title, company, location, posted date and where to apply. Jobs on unapproved listings never appear.
Annotations the server declares
- title: List open jobs (Pro)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_leadsThe user's FirmLedger Leads inbox: inquiries received on their listings (box "received", the default), archived ones ("archived"), or inquiries they sent to other businesses ("sent…No findings
Why it is in this group
- The name "list_leads" says "list": a word for reading.
Description, as the server wrote it The user's FirmLedger Leads inbox: inquiries received on their listings (box "received", the default), archived ones ("archived"), or inquiries they sent to other businesses ("sent"). Filter by status or listing; paginated.
Annotations the server declares
- title: List my leads
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_my_ticketsThe user's FirmLedger support tickets.No findings
Why it is in this group
- The name "list_my_tickets" says "list": a word for reading.
Description, as the server wrote it The user's FirmLedger support tickets. Pass a ticket reference to read that ticket's full conversation.
Annotations the server declares
- title: Read my support tickets
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_plansThe current FirmLedger Pro offers with price, billing and duration.No findings
Why it is in this group
- The name "list_plans" says "list": a word for reading.
Description, as the server wrote it The current FirmLedger Pro offers with price, billing and duration. With an API key it also says whether this account is already on Pro and whether a free trial is available. Use before prepare_upgrade.
Annotations the server declares
- title: List FirmLedger Pro plans
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_webhooksThe account's webhook destinations with events, category filters, active state and signing-secret prefix — plus recent deliveries (status, HTTP code, attempts, last error) when a w…No findings
Why it is in this group
- The name "list_webhooks" says "list": a word for reading.
Description, as the server wrote it The account's webhook destinations with events, category filters, active state and signing-secret prefix — plus recent deliveries (status, HTTP code, attempts, last error) when a webhook id is given.
Annotations the server declares
- title: List my webhook destinations
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_listingsSearch approved FirmLedger company records by name or keyword, category, country, city and verified status.No findings
Why it is in this group
- The name "search_listings" says "search": a word for reading.
Description, as the server wrote it Search approved FirmLedger company records by name or keyword, category, country, city and verified status. Returns a short list (name, category, location, verified flag, tick, confidence score, one-line description) plus the accurate total, for picking the right company before calling get_listing. Use city for places like "Nairobi" and country for "Kenya".
Annotations the server declares
- title: Search FirmLedger listings
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http firmledger https://mcp.firmledger.co.ke/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__firmledger__search_listings",
"mcp__firmledger__get_listing",
"mcp__firmledger__get_relationships",
"mcp__firmledger__get_news",
"mcp__firmledger__list_jobs",
"mcp__firmledger__list_categories",
"mcp__firmledger__list_countries",
"mcp__firmledger__compare_listings",
"mcp__firmledger__list_plans",
"mcp__firmledger__list_ad_packages",
"mcp__firmledger__get_my_listings",
"mcp__firmledger__get_analytics",
"mcp__firmledger__list_leads",
"mcp__firmledger__get_lead",
"mcp__firmledger__get_watchlist",
"mcp__firmledger__get_notifications",
"mcp__firmledger__list_my_tickets",
"mcp__firmledger__get_api_status",
"mcp__firmledger__list_webhooks",
"mcp__firmledger__list_api_keys",
"mcp__firmledger__connection_status",
"mcp__firmledger__get_connection_status"
],
"ask": [
"mcp__firmledger__check_domain",
"mcp__firmledger__prepare_listing_submission",
"mcp__firmledger__prepare_upgrade",
"mcp__firmledger__prepare_advertising",
"mcp__firmledger__export_watchlist_csv",
"mcp__firmledger__start_lead",
"mcp__firmledger__reply_to_lead",
"mcp__firmledger__watchlist_add",
"mcp__firmledger__create_support_ticket",
"mcp__firmledger__post_job",
"mcp__firmledger__mark_notifications_read",
"mcp__firmledger__refresh_listing_scores",
"mcp__firmledger__refresh_listing_tech",
"mcp__firmledger__refresh_listing_news",
"mcp__firmledger__prepare_listing_claim",
"mcp__firmledger__create_webhook",
"mcp__firmledger__reply_to_ticket",
"mcp__firmledger__update_my_listing",
"mcp__firmledger__request_authentication"
],
"deny": [
"mcp__firmledger__set_lead_status",
"mcp__firmledger__watchlist_remove",
"mcp__firmledger__manage_job",
"mcp__firmledger__request_listing_removal",
"mcp__firmledger__manage_webhooks",
"mcp__firmledger__manage_api_keys",
"mcp__firmledger__manage_lead",
"mcp__firmledger__revoke_connection"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as firmledger. Review it before you use it.