FirmLedger
What this MCP does
Searches and manages verified business directory listings, company profiles, leads, jobs, watchlists, analytics, advertising, and account integrations.
Tools
Input schema
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 200, 'minLength': 3, 'description': 'A domain such as "example.co.ke" or a full URL.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listings'], 'properties': {'listings': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}, 'maxItems': 4, 'minItems': 2, 'description': '2 to 4 companies (slugs are best).'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['subject', 'category', 'body'], 'properties': {'body': {'type': 'string', 'maxLength': 5000, 'minLength': 20, 'description': 'The issue in a few sentences.'}, 'subject': {'type': 'string', 'maxLength': 200, 'minLength': 4}, 'category': {'enum': ['billing', 'technical', 'listing', 'account', 'verification', 'other'], 'type': 'string'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['url', 'events'], 'properties': {'url': {'type': 'string', 'maxLength': 500, 'description': 'Public HTTPS destination for signed events.'}, 'label': {'type': 'string', 'maxLength': 80}, 'events': {'type': 'array', 'items': {'enum': ['listing.approved', 'listing.rejected', 'listing.updated', 'listing.created', 'listing.deleted', 'claim.verified'], 'type': 'string'}, 'maxItems': 6, 'minItems': 1}, 'categories': {'type': 'array', 'items': {'type': 'string', 'maxLength': 80}, 'maxItems': 50}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "Optional: one of the user's listings. Omit for all of them combined."}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'key_prefix': {'type': 'string', 'maxLength': 40, 'description': 'Optional: focus on one key by its prefix.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['lead_id'], 'properties': {'lead_id': {'type': 'integer', 'minimum': 1, 'description': 'lead_id from list_leads.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'limit': {'anyOf': [{'type': 'integer'}, {'type': 'string', 'pattern': '^-?[0-9]+$'}], 'default': 10, 'description': 'Stories to return (1-12).. Integer or numeric string, clamped to 1–12.'}, 'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 60, 'minimum': 1}, 'unread_only': {'type': 'boolean', 'default': False}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'limit': {'anyOf': [{'type': 'integer'}, {'type': 'string', 'pattern': '^-?[0-9]+$'}], 'default': 10, 'description': 'limit. Integer or numeric string, clamped to 1–25.'}, 'query': {'type': 'string', 'maxLength': 80, 'description': 'Optional keyword in the job title or description.'}, 'offset': {'anyOf': [{'type': 'integer'}, {'type': 'string', 'pattern': '^-?[0-9]+$'}], 'default': 0, 'description': 'offset. Integer or numeric string, clamped to 0–10000.'}, 'company': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'Optional company (slug, exact name, FirmLedger ID or profile URL).'}, 'location': {'type': 'string', 'maxLength': 80, 'description': 'Optional location, e.g. "Nairobi" or "Kenya" or "Remote".'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'box': {'enum': ['received', 'archived', 'sent'], 'type': 'string'}, 'page': {'type': 'integer', 'default': 1, 'minimum': 1}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'status': {'enum': ['new', 'contacted', 'qualified', 'won', 'lost'], 'type': 'string'}, 'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "Optional: only leads for this listing of the user's."}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'ticket': {'type': 'string', 'maxLength': 40, 'description': 'Optional ticket reference, e.g. "TK-1A2B3C".'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1}, 'webhook_id': {'type': 'integer', 'minimum': 1, 'description': 'Optional: one destination, with its recent deliveries.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['action'], 'properties': {'label': {'type': 'string', 'maxLength': 60, 'description': 'create: a name for the key.'}, 'action': {'enum': ['create', 'revoke', 'update_scopes'], 'type': 'string'}, 'key_id': {'type': 'integer', 'minimum': 1, 'description': 'revoke/update_scopes: the key id from list_api_keys.'}, 'scopes': {'type': 'array', 'items': {'enum': ['read:listings', 'write:listings', 'export', 'manage:webhooks', 'read:usage', 'read:account', 'write:account'], 'type': 'string'}, 'maxItems': 9, 'minItems': 1, 'description': 'Scope ids. Required for update_scopes; create defaults to the standard scopes.', 'uniqueItems': True}, 'key_prefix': {'type': 'string', 'maxLength': 40, 'description': 'Optional alternative to key_id.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['action', 'job_id'], 'properties': {'title': {'type': 'string', 'maxLength': 80}, 'action': {'enum': ['edit', 'close', 'remove', 'delete'], 'type': 'string'}, 'job_id': {'type': 'integer', 'minimum': 1}, 'location': {'type': 'string', 'maxLength': 80}, 'apply_url': {'type': 'string', 'maxLength': 400}, 'role_type': {'enum': ['Full-time', 'Part-time', 'Contract', 'Internship', 'Remote'], 'type': 'string'}, 'description': {'type': 'string', 'maxLength': 600}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['action', 'lead_id'], 'properties': {'action': {'enum': ['archive', 'unarchive', 'delete'], 'type': 'string'}, 'lead_id': {'type': 'integer', 'minimum': 1, 'description': 'The lead id from list_leads.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['action'], 'properties': {'url': {'type': 'string', 'maxLength': 500, 'description': 'create/update: the receiver URL (https in production).'}, 'label': {'type': 'string', 'maxLength': 80}, 'action': {'enum': ['create', 'update', 'pause', 'resume', 'rotate_secret', 'test', 'retry_delivery', 'delete'], 'type': 'string'}, 'events': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 6, 'description': 'create/update: event types to subscribe to.'}, 'categories': {'type': 'array', 'items': {'type': 'string', 'maxLength': 80}, 'maxItems': 50}, 'webhook_id': {'type': 'integer', 'minimum': 1, 'description': 'Required for every action except create.'}, 'delivery_id': {'type': 'integer', 'minimum': 1, 'description': 'retry_delivery: which delivery to retry.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'all': {'type': 'boolean'}, 'notification_id': {'type': 'integer', 'minimum': 1}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing', 'title', 'location', 'apply_url', 'description'], 'properties': {'title': {'type': 'string', 'maxLength': 80, 'minLength': 3}, 'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "One of the user's own listings."}, 'location': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'City, or "Remote".'}, 'apply_url': {'type': 'string', 'maxLength': 400, 'description': 'Full https:// link to the job post or careers page.'}, 'role_type': {'enum': ['Full-time', 'Part-time', 'Contract', 'Internship', 'Remote'], 'type': 'string'}, 'description': {'type': 'string', 'maxLength': 600, 'minLength': 30}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing', 'package'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "One of the user's own approved listings (see get_my_listings or list_ad_packages)."}, 'package': {'type': 'string', 'maxLength': 120, 'description': 'The package id from list_ad_packages (or its exact name).'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'method': {'enum': ['dns', 'meta', 'badge'], 'type': 'string'}, 'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'city': {'type': 'string', 'maxLength': 80, 'description': 'Optional city.'}, 'name': {'type': 'string', 'maxLength': 120, 'minLength': 2, 'description': 'Company name.'}, 'country': {'type': 'string', 'maxLength': 60, 'description': 'Optional country.'}, 'website': {'type': 'string', 'maxLength': 200, 'description': 'Company website, e.g. "example.co.ke".'}, 'category': {'type': 'string', 'maxLength': 60, 'description': 'Optional category.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'plan': {'type': 'string', 'maxLength': 120, 'description': 'The plan id from list_plans (or its exact name).'}, 'promo_code': {'type': 'string', 'maxLength': 40, 'description': 'Optional promo code the user gave you.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "One of the user's own approved listings."}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "One of the user's own listings."}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': "One of the user's own listings."}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['lead_id', 'message'], 'properties': {'lead_id': {'type': 'integer', 'minimum': 1}, 'message': {'type': 'string', 'maxLength': 4000, 'minLength': 2, 'description': 'The reply text, written or approved by the user.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['ticket', 'message'], 'properties': {'ticket': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'The ticket reference (e.g. TK-1A2B3C) or its id, from list_my_tickets.'}, 'message': {'type': 'string', 'maxLength': 4000, 'minLength': 2, 'description': 'The reply text, written or approved by the user.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing', 'reason'], 'properties': {'reason': {'type': 'string', 'maxLength': 2000, 'minLength': 20, 'description': 'Why it should be removed (20+ characters).'}, 'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'A listing the user owns or submitted.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {'city': {'type': 'string', 'maxLength': 80, 'description': 'City or region, e.g. "Nairobi".'}, 'type': {'enum': ['company', 'startup', 'agency', 'organization', 'product', 'service', 'publisher'], 'type': 'string', 'description': 'Entity type.'}, 'limit': {'anyOf': [{'type': 'integer'}, {'type': 'string', 'pattern': '^-?[0-9]+$'}], 'default': 10, 'description': 'Results per page (1-25).. Integer or numeric string, clamped to 1–25.'}, 'query': {'type': 'string', 'maxLength': 100, 'description': 'Company name or keyword (matched against name, tagline, description, tags and city).'}, 'offset': {'anyOf': [{'type': 'integer'}, {'type': 'string', 'pattern': '^-?[0-9]+$'}], 'default': 0, 'description': 'Results to skip, for paging (use next_offset).. Integer or numeric string, clamped to 0–10000.'}, 'country': {'type': 'string', 'maxLength': 60, 'description': 'Country name, e.g. "Kenya".'}, 'category': {'type': 'string', 'maxLength': 60, 'description': 'Category name, e.g. "Fintech". Call list_categories for valid names.'}, 'verified_only': {'anyOf': [{'type': 'boolean'}, {'enum': ['true', 'false'], 'type': 'string'}], 'description': 'Only ownership-verified records (boolean or the string true/false).'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['lead_id', 'status'], 'properties': {'status': {'enum': ['new', 'contacted', 'qualified', 'won', 'lost'], 'type': 'string'}, 'lead_id': {'type': 'integer', 'minimum': 1}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing', 'message'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'description': 'Optional sender name; defaults to the member profile name.'}, 'phone': {'type': 'string', 'maxLength': 40}, 'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}, 'message': {'type': 'string', 'maxLength': 4000, 'minLength': 10}, 'looking_for': {'type': 'string', 'maxLength': 140, 'description': 'Optional short subject or what the member needs.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'city': {'type': 'string', 'maxLength': 80}, 'name': {'type': 'string', 'maxLength': 120}, 'size': {'type': 'string', 'maxLength': 40}, 'tags': {'type': 'string', 'maxLength': 300}, 'email': {'type': 'string', 'maxLength': 190}, 'phone': {'type': 'string', 'maxLength': 40}, 'region': {'type': 'string', 'maxLength': 80}, 'address': {'type': 'string', 'maxLength': 200}, 'country': {'type': 'string', 'maxLength': 80}, 'founded': {'type': 'string', 'maxLength': 12}, 'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}, 'socials': {'anyOf': [{'type': 'object', 'properties': {'x': {'type': 'string', 'maxLength': 500}, 'youtube': {'type': 'string', 'maxLength': 500}, 'facebook': {'type': 'string', 'maxLength': 500}, 'linkedin': {'type': 'string', 'maxLength': 500}, 'instagram': {'type': 'string', 'maxLength': 500}}, 'additionalProperties': False}, {'type': 'string', 'maxLength': 800}], 'description': 'Social profile links keyed by network; use an empty object to clear. A JSON object string is also accepted.'}, 'tagline': {'type': 'string', 'maxLength': 160}, 'website': {'type': 'string', 'maxLength': 300}, 'logo_url': {'type': 'string', 'maxLength': 500}, 'description': {'type': 'string', 'maxLength': 4000}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['listing'], 'properties': {'listing': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'The company: its FirmLedger slug (best — returned by search_listings), its exact name, its FirmLedger ID such as "FL-00012", or its FirmLedger profile URL.'}, 'confirmation_token': {'type': 'string', 'maxLength': 2048, 'description': '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.'}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
AwardCast Federal Contracts
Searches and analyzes US federal solicitations, agencies, contractors, award history, pricing benchmarks, and upcoming recompetes.
Vetari
Provides Swiss commercial-register company and publication data with AI-based lead scoring.
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
Meta Council
Provides governed workflows for consulting, outreach, sales deals, invoices, marketing campaigns, content approvals, accounting a…
Stratalize Healthcare
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Governance
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Oracle
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Real Estate
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…