Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

FirmLedger

REMOTE · MCP.FIRMLEDGER.CO.KE · SCANNED SEP 29

FirmLedger: search and verify businesses. Free needs no key; Pro adds contacts, news, jobs.

64 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability77
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5702 tokens (~123/item across 46 items; 46 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management3
  • Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage88
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 63% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 47 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the FirmLedger MCP server?

FirmLedger is a hosted endpoint at https://mcp.firmledger.co.ke/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.firmledger.co.ke

# add to Claude Code
claude mcp add --transport http ke-co-firmledger-firmledger 'https://mcp.firmledger.co.ke/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "ke-co-firmledger-firmledger": {
      "url": "https://mcp.firmledger.co.ke/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ke-co-firmledger-firmledger": {
      "type": "http",
      "url": "https://mcp.firmledger.co.ke/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.ke-co-firmledger-firmledger]
url = "https://mcp.firmledger.co.ke/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ke-co-firmledger-firmledger": {
      "type": "remote",
      "url": "https://mcp.firmledger.co.ke/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ke-co-firmledger-firmledger --url 'https://mcp.firmledger.co.ke/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ke-co-firmledger-firmledger:
    url: "https://mcp.firmledger.co.ke/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ke-co-firmledger-firmledger": {
      "Transport": "http",
      "Url": "https://mcp.firmledger.co.ke/mcp"
    }
  }
}
# add to Vellum
assistant mcp add ke-co-firmledger-firmledger -t streamable-http -u 'https://mcp.firmledger.co.ke/mcp'
// mcp.json
{
  "mcpServers": {
    "ke-co-firmledger-firmledger": {
      "type": "http",
      "url": "https://mcp.firmledger.co.ke/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 29 Sept 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 28 Sept 26 64

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 29 Sept 2026 · Probed https://mcp.firmledger.co.ke/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.firmledger.co.ke CN=YE1,O=Let's Encrypt,C=US 28 Sept 2026 27 Dec 2026 ECDSA 256 ECDSA-SHA384 6dc1c2729276ecddc713ba32acb64a2e2f1
SANs: mcp.firmledger.co.ke
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.firmledger.co.ke. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ke. present 17597 8 Verified
co.ke. absent Delegated
firmledger.co.ke. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.firmledger.co.ke/mcp Verified 200
http (plaintext) http://mcp.firmledger.co.ke/mcp HTTPS enforced 301 https://mcp.firmledger.co.ke/mcp
MCP tools · 46 exposed · ~4,979 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
check_domain ~63

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.

NameTypeReqDescription
domainstringyesA domain such as "example.co.ke" or a full URL.

No output schema declared.

No examples provided.

compare_listings ~95

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.

NameTypeReqDescription
listingsarrayyes2 to 4 companies (slugs are best).

No output schema declared.

No examples provided.

connection_status ~48

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

create_support_ticket ~116

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.

NameTypeReqDescription
bodystringyesThe issue in a few sentences.
categorystringyes–
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
subjectstringyes–

No output schema declared.

No examples provided.

create_webhook ~134

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.

NameTypeReqDescription
categoriesarray––
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
eventsarrayyes–
labelstring––
urlstringyesPublic HTTPS destination for signed events.

No output schema declared.

No examples provided.

export_watchlist_csv ~51

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_analytics ~83

Audience analytics for the user's own listings — views today/7/30 days/total, unique visitors, profile and website clicks, leads, the 30-day funnel, top visitor locations and per-listing views. The same numbers as Dashboard → Audience analytics.

NameTypeReqDescription
listingstring–Optional: one of the user's listings. Omit for all of them combined.

No output schema declared.

No examples provided.

get_api_status ~129

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.

NameTypeReqDescription
key_prefixstring–Optional: focus on one key by its prefix.

No output schema declared.

No examples provided.

get_lead ~55

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.

NameTypeReqDescription
lead_idintegeryeslead_id from list_leads.

No output schema declared.

No examples provided.

get_listing ~131

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.

NameTypeReqDescription
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.

No output schema declared.

No examples provided.

get_my_listings ~49

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".

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_news ~110

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.

NameTypeReqDescription
limit––Stories to return (1-12).. Integer or numeric string, clamped to 1–12.
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.

No output schema declared.

No examples provided.

get_notifications ~48

The user's in-app FirmLedger notifications, newest first, with the unread count. Set unread_only for just the unread ones.

NameTypeReqDescription
limitinteger––
unread_onlyboolean––

No output schema declared.

No examples provided.

get_relationships ~107

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.

NameTypeReqDescription
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.

No output schema declared.

No examples provided.

get_watchlist ~21

The companies the user watches on FirmLedger, newest first.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_ad_packages ~52

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_api_keys ~47

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_categories ~30

Every FirmLedger category with its number of approved listings. Use to pick a valid category for search_listings.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_countries ~26

The countries present in the FirmLedger directory, each with its number of approved listings.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_jobs ~150

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.

NameTypeReqDescription
companystring–Optional company (slug, exact name, FirmLedger ID or profile URL).
limit––limit. Integer or numeric string, clamped to 1–25.
locationstring–Optional location, e.g. "Nairobi" or "Kenya" or "Remote".
offset––offset. Integer or numeric string, clamped to 0–10000.
querystring–Optional keyword in the job title or description.

No output schema declared.

No examples provided.

list_leads ~99

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.

NameTypeReqDescription
boxstring––
limitinteger––
listingstring–Optional: only leads for this listing of the user's.
pageinteger––
statusstring––

No output schema declared.

No examples provided.

list_my_tickets ~52

The user's FirmLedger support tickets. Pass a ticket reference to read that ticket's full conversation.

NameTypeReqDescription
ticketstring–Optional ticket reference, e.g. "TK-1A2B3C".

No output schema declared.

No examples provided.

list_plans ~49

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.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_webhooks ~72

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.

NameTypeReqDescription
limitinteger––
webhook_idinteger–Optional: one destination, with its recent deliveries.

No output schema declared.

No examples provided.

manage_api_keys ~188

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.

NameTypeReqDescription
actionstringyes–
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
key_idinteger–revoke/update_scopes: the key id from list_api_keys.
key_prefixstring–Optional alternative to key_id.
labelstring–create: a name for the key.
scopesarray–Scope ids. Required for update_scopes; create defaults to the standard scopes.

No output schema declared.

No examples provided.

manage_job ~156

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.

NameTypeReqDescription
actionstringyes–
apply_urlstring––
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
descriptionstring––
job_idintegeryes–
locationstring––
role_typestring––
titlestring––

No output schema declared.

No examples provided.

manage_lead ~109

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).

NameTypeReqDescription
actionstringyes–
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
lead_idintegeryesThe lead id from list_leads.

No output schema declared.

No examples provided.

manage_webhooks ~190

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.

NameTypeReqDescription
actionstringyes–
categoriesarray––
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
delivery_idinteger–retry_delivery: which delivery to retry.
eventsarray–create/update: event types to subscribe to.
labelstring––
urlstring–create/update: the receiver URL (https in production).
webhook_idinteger–Required for every action except create.

No output schema declared.

No examples provided.

mark_notifications_read ~93

Mark one notification (notification_id) or all of them (all: true) as read. Requires the user's confirmation.

NameTypeReqDescription
allboolean––
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
notification_idinteger––

No output schema declared.

No examples provided.

post_job ~167

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.

NameTypeReqDescription
apply_urlstringyesFull https:// link to the job post or careers page.
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
descriptionstringyes–
listingstringyesOne of the user's own listings.
locationstringyesCity, or "Remote".
role_typestring––
titlestringyes–

No output schema declared.

No examples provided.

prepare_advertising ~121

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.

NameTypeReqDescription
listingstringyesOne of the user's own approved listings (see get_my_listings or list_ad_packages).
packagestringyesThe package id from list_ad_packages (or its exact name).

No output schema declared.

No examples provided.

prepare_listing_claim ~112

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.

NameTypeReqDescription
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.
methodstring––

No output schema declared.

No examples provided.

prepare_listing_submission ~130

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.

NameTypeReqDescription
categorystring–Optional category.
citystring–Optional city.
countrystring–Optional country.
namestringyesCompany name.
websitestring–Company website, e.g. "example.co.ke".

No output schema declared.

No examples provided.

prepare_upgrade ~139

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.

NameTypeReqDescription
planstring–The plan id from list_plans (or its exact name).
promo_codestring–Optional promo code the user gave you.

No output schema declared.

No examples provided.

refresh_listing_news ~106

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.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
listingstringyesOne of the user's own approved listings.

No output schema declared.

No examples provided.

refresh_listing_scores ~100

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.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
listingstringyesOne of the user's own listings.

No output schema declared.

No examples provided.

refresh_listing_tech ~95

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.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
listingstringyesOne of the user's own listings.

No output schema declared.

No examples provided.

reply_to_lead ~124

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.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
lead_idintegeryes–
messagestringyesThe reply text, written or approved by the user.

No output schema declared.

No examples provided.

reply_to_ticket ~145

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.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
messagestringyesThe reply text, written or approved by the user.
ticketstringyesThe ticket reference (e.g. TK-1A2B3C) or its id, from list_my_tickets.

No output schema declared.

No examples provided.

request_listing_removal ~116

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.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
listingstringyesA listing the user owns or submitted.
reasonstringyesWhy it should be removed (20+ characters).

No output schema declared.

No examples provided.

search_listings ~244

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".

NameTypeReqDescription
categorystring–Category name, e.g. "Fintech". Call list_categories for valid names.
citystring–City or region, e.g. "Nairobi".
countrystring–Country name, e.g. "Kenya".
limit––Results per page (1-25).. Integer or numeric string, clamped to 1–25.
offset––Results to skip, for paging (use next_offset).. Integer or numeric string, clamped to 0–10000.
querystring–Company name or keyword (matched against name, tagline, description, tags and city).
typestring–Entity type.
verified_only––Only ownership-verified records (boolean or the string true/false).

No output schema declared.

No examples provided.

set_lead_status ~94

Move a lead in the user's business inbox to new, contacted, qualified, won or lost. Requires the user's confirmation.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
lead_idintegeryes–
statusstringyes–

No output schema declared.

No examples provided.

start_lead ~195

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.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.
looking_forstring–Optional short subject or what the member needs.
messagestringyes–
namestring–Optional sender name; defaults to the member profile name.
phonestring––

No output schema declared.

No examples provided.

update_my_listing ~303

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.

NameTypeReqDescription
addressstring––
citystring––
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
countrystring––
descriptionstring––
emailstring––
foundedstring––
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.
logo_urlstring––
namestring––
phonestring––
regionstring––
sizestring––
socials––Social profile links keyed by network; use an empty object to clear. A JSON object string is also accepted.
taglinestring––
tagsstring––
websitestring––

No output schema declared.

No examples provided.

watchlist_add ~122

Add an approved company to the user's watchlist so they are notified when its record changes. Requires the user's confirmation.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.

No output schema declared.

No examples provided.

watchlist_remove ~113

Remove a company from the user's watchlist. Requires the user's confirmation.

NameTypeReqDescription
confirmation_tokenstring–Leave empty on the first call: you get an action_summary and a token instead of the action. After the user explicitly confirms that summary, call again with the SAME arguments plus this token.
listingstringyesThe company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.

No output schema declared.

No examples provided.

Common questions

What is the FirmLedger MCP server?

FirmLedger is an MCP server listed in the public MCP registry as ke.co.firmledger/firmledger. FirmLedger: search and verify businesses. Free needs no key; Pro adds contacts, news, jobs. This page covers its hosted endpoint (https://mcp.firmledger.co.ke/mcp).

Is the FirmLedger MCP server safe to use?

FirmLedger scores 64 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the FirmLedger MCP server expose?

FirmLedger exposes 46 tools: search_listings, get_listing, get_relationships, get_news, list_jobs, and 41 more. Their descriptions and schemas cost roughly 4,979 tokens of context every time the server is loaded.

Does the FirmLedger MCP server require authentication?

No. We connected to FirmLedger without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the FirmLedger MCP server still maintained?

FirmLedger is still listed as active in the MCP registry. We last reached this channel on 29 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.