Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Akta Pro MCP server

Vendor MCP
Open markdown

The Akta Pro MCP connector routes your AI agent's tool calls to Akta Pro's own MCP server through Scalekit. Each user connects their own Akta Pro API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 17 tools.

Tools
17
What they doRead · write · destructive
17 · 0 · 017 read0 write0 destructive
Users sign in with

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Akta Pro MCP connection

    In AgentKit > Connections, create an Akta Pro MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'aktapromcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Akta Pro MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'aktapromcp_account_status',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user opens the link once and enters their Akta Pro credentials there. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • aktapromcp_account_statusReport the current user's plan tier and credit balance.Read-only

    Account Status

    Report the current user's plan tier and credit balance. Free. No arguments — identity is taken from the authenticated API key. Call this when the user asks about their plan, credits, or limits, and consult it before attempting Subscription/Enterprise-only tools (headcount_trends, website_traffic, employee_reviews, product_reviews, job_posts, social_posts) or enterprise-only enrichment sections (Funding Detail, M&A and Investment) to pre-empt a 403. Returns: is_enterprise (bool), package_type (top_up | subscription | enterprise), credit_balance (remaining credits), currency.

    Inputs

    This tool takes no inputs.

  • aktapromcp_company_dataEnrich a company with the requested sections, returned as Markdown.Read-only

    Company Data

    Enrich a company with the requested sections, returned as Markdown. akta-pro renders the (large, deeply-nested) company data into clean Markdown server-side. Sections (credits): firmographic 2, business_model 2, company_assessment 2, trust_signal 0.5, company_hierarchy 0.5, digital_presence 0.5, financial_estimate 0.5, location 0.5, management_profile 1.5, product_offering 2, strategic_signal 1.5, customer_profile 1, industry 1, technology 2, funding_detail 3 (enterprise-only), mna_and_investment 5 (enterprise-only). The two enterprise-only sections are skipped (not an error) when the caller isn't on an Enterprise plan; the returned Markdown notes any that were dropped. Prerequisite: `company` must be an akta-pro uuid from company_search (free). Names and websites are rejected.

    Inputs

    companystringrequired
    akta-pro company uuid — the 7-character id from company_search (e.g. '00000l1'). This is the ONLY accepted form: company names ('Canva') and website domains ('canva.com') are rejected. Always call company_search first (it's free) and pass the `uuid` of the candidate you want; a domain can map to several distinct entities, so picking the right uuid is your decision to make, not the API's.
    sectionsarrayrequired
    One or more data sections to fetch. You MUST choose sections explicitly — there is no 'all'. Each section is billed separately. funding_detail and mna_and_investment are enterprise-only; they're silently skipped (not an error) for non-enterprise callers.
  • aktapromcp_company_data_conciseReturn a condensed company overview (no section selection).Read-only

    Company Data (Concise)

    Return a condensed company overview (no section selection). akta-pro returns a slimmed JSON with the fluff redacted — much smaller than full enrichment. Intended flat cost 8 credits. Prerequisite: `company` must be an akta-pro uuid from company_search (free). Names and websites are rejected.

    Inputs

    companystringrequired
    akta-pro company uuid — the 7-character id from company_search (e.g. '00000l1'). This is the ONLY accepted form: company names ('Canva') and website domains ('canva.com') are rejected. Always call company_search first (it's free) and pass the `uuid` of the candidate you want; a domain can map to several distinct entities, so picking the right uuid is your decision to make, not the API's.
  • aktapromcp_employee_reviewsEmployee reviews: overall + dimension-level ratings and individual reviews (Glassdoor et al.).Read-only

    Employee Reviews

    Employee reviews: overall + dimension-level ratings and individual reviews (Glassdoor et al.). 1.5 credits per 50 reviews. Subscription/Enterprise only. Prerequisite: `company` must be an akta-pro uuid from company_search (free). Names and websites are rejected.

    Inputs

    companystringrequired
    akta-pro company uuid — the 7-character id from company_search (e.g. '00000l1'). This is the ONLY accepted form: company names ('Canva') and website domains ('canva.com') are rejected. Always call company_search first (it's free) and pass the `uuid` of the candidate you want; a domain can map to several distinct entities, so picking the right uuid is your decision to make, not the API's.
    limitinteger
    Max reviews to return (max 100).
    offsetinteger
    Pagination offset.
  • aktapromcp_generate_company_listRun a company list: the companies matching your filters.Read-only

    Generate Company List

    Run a company list: the companies matching your filters. Cost: 1.5 credits per call that returns companies + 0.2 per company, so 25 companies is 6.5 credits. A query matching nothing is FREE. The cost does not depend on the fields: this tool always returns the same identifying fields per company and never full enrichment, so screening a list is cheap and predictable. For depth, call company_data on the few uuids that matter — that is billed per section, on those companies only. Prerequisites, in order: list_filters() to see what exists, then get_filter_values() for every filter that has a `dropdown_type`. Use those values VERBATIM and never write one from memory — these are exact strings from akta-pro's data, so an invented value matches zero companies instead of erroring. Key this call by each entry's `filter` — the one name that field has everywhere. Send at least one selective filter. A very broad or unfiltered query is rejected, not slow — it exhausts the backend's query timeout. Always read `warnings` in the result. A value that was dropped there means the list is BROADER than what the user asked for, which otherwise looks exactly like a good answer; a `coerced` entry means a value was normalised to its canonical form (harmless, but worth trusting over your own spelling next time). A filter key that isn't in list_filters() is an error, not a warning — the call fails with the offending key named and costs nothing, so fix the key and retry rather than guessing. Each company comes back with uuid, name, website, product_category, company_type and hq_country — that is the whole row; there is no option to return more per company. Feed a `uuid` straight into company_data / news_signals for depth on one of them. `total_count` saturates at 500, meaning "500 or more" — it is also the deepest page reachable, so narrow the filters rather than paging past it.

    Inputs

    filtersobjectrequired
    The filters to apply, keyed by the `filter` from each list_filters() entry (its enrichment path). E.g. {"firmographic.company_type": "Private", "location.hq.country": ["USA"], "firmographic.founded_year": {"gte": 2018}}. Filters sharing a `same_element_group` must all match the SAME sub-object. Ranges are {"gte": .., "lte": ..} (inclusive, either bound optional), booleans true/false, name filters a case-insensitive substring. At least one filter is REQUIRED.
    limitinteger
    Companies to return.
    offsetinteger
    Pagination offset.
    sort_bystring
    Sort field. Defaults to relevance. Band fields (revenue_estimate, valuation_estimate, employee_range) sort by band magnitude, not alphabetically.
    sort_orderstring
    Sort direction — desc gives highest revenue / most funding / largest headcount / most recently founded first. Ignored while sort_by is relevance.one of ascdesc
  • aktapromcp_get_filter_valuesGet the allowed values for one or more filters.Read-only

    Get Filter Values

    Get the allowed values for one or more filters. Free (0 credits). Two kinds of result: * A fixed list -> [{label, value}]. Use `value` verbatim; `label` is just the human-readable form. `query` substring-filters the list. * A searched taxonomy (industry.industry, industry.naics, industry.sic; investors resolve to companies) -> ranked matches with a `code` and a similarity score. `query` is REQUIRED, and you use the `code`. For `industry`, `level` picks how deep in the taxonomy to search — leave it at the ['l4'] default for a specific niche, and pass ['all'] for a broad sector, since a broader code matches every company beneath it in the hierarchy. NEVER write a value from memory. These are exact strings from akta-pro's data, and a value that merely looks plausible matches zero companies instead of failing — so a made-up value silently ruins the whole query. If nothing returned clearly means what the user asked for, leave that filter out rather than forcing a weak match. Check `truncated` / `total_available`: if what you need isn't in the list, re-query with a narrower `query`.

    Inputs

    lookupsarrayrequired
    The filters whose values you want — resolve everything in ONE call (1-25 lookups). Take each `dropdown_type` from a list_filters() entry.