Model Context Protocol

Every CoreNexis API, inside your AI agent

One server address turns all 9+ CoreNexis APIs into tools your agent can call: convert documents, read text out of images and PDFs, check email addresses, convert and host images, and generate codes. You authenticate with the same API key you already use for REST.

Connect in two minutes Get an API key POSThttps://api.corenexis.com/mcp/server
OperationalCurrent status
1.0.0Version
9 APIs, 14 toolsExposed
7 Sep 2026Updated

1. What this is

The Model Context Protocol is the standard way an AI assistant discovers and uses outside tools. This server speaks it, and every CoreNexis API appears through it as a tool your agent can call by name.

The important thing to understand is what this server does not do. It holds no credentials and grants no access of its own. When your agent calls a tool, this server makes the same REST request you could have made yourself, using your API key, and the API being called decides everything: whether the key is valid, whether your account is subscribed, and whether your quota allows it. A key that works over REST works here, and one that does not is refused here in the same way and for the same reason.

Nothing new to learn or pay for. Your existing key, subscriptions, plans and quotas carry over exactly. This is a different way to reach the same APIs, not a separate product with its own billing.

2. Before you start

Two things, both free to begin with.

Get an API key

Create one at dash.corenexis.com/api-keys. A key belongs to your account rather than to one API, so a single key is all you ever need here.

Subscribe to the APIs you want to use

Each API is subscribed to separately, and most have a free tier. Your key will only work for the APIs it is subscribed to, which is the single most common surprise when setting this up: the server connects and lists every tool, then one particular tool refuses the call. That refusal names the API and links you straight to its subscribe page.

Treat the key as a password. Anyone holding it can spend your quota. Put it in your agent's configuration where secrets belong, not in a shared file or a public repository.

3. The endpoint

POSThttps://api.corenexis.com/mcp/server

It uses the Streamable HTTP transport, which is what current MCP clients speak. There is nothing to install and no separate process to run: point your client at the address above and it works.

DetailValue
TransportStreamable HTTP
Protocol version2025-06-18, with 2025-03-26 and 2024-11-05 also accepted
Server namecorenexis
Authenticationx-api-key header
Health checkhttps://api.corenexis.com/mcp/health, open to everyone

4. Authentication

Send your API key exactly as you would to any CoreNexis REST endpoint.

Header
x-api-key: your_api_key

Some clients can only send a bearer token, and a few cannot set headers at all. Both are accommodated, in this order of preference:

HowWhat to sendWhen to use it
x-api-key Preferredx-api-key: your_api_keyThe normal way. Same header as the REST APIs.
Authorization Also worksAuthorization: Bearer your_api_keyClients that only offer a bearer token field.
key Last resorthttps://api.corenexis.com/mcp/server?key=your_api_keyClients with no way to set a header at all.

The query string is the weakest of the three. A key in a URL tends to end up in browser history, proxy logs and shell history. Use it only when a client leaves you no choice, and give that client a key of its own so it can be withdrawn on its own.

If no key reaches the server, connecting fails immediately with a message saying what to add and where to get it, rather than appearing to work and then failing on the first real call.

5. Connect your agent

Pick the one you use. The address and the key are the same everywhere.

Claude

In Claude Desktop or Claude Code, add the server to your MCP configuration file.

claude_desktop_config.json
{
  "mcpServers": {
    "corenexis": {
      "type": "http",
      "url": "https://api.corenexis.com/mcp/server",
      "headers": {
        "x-api-key": "your_api_key"
      }
    }
  }
}

Restart the app. The CoreNexis tools appear in the tool list, and you can then simply ask for what you want: "turn this Markdown into a PDF", or "read the text out of this image".

n8n

Use the MCP Client node.

FieldValue
Connection typeHTTP Streamable
Endpoint URLhttps://api.corenexis.com/mcp/server
AuthenticationGeneric credential, Header Auth
Header namex-api-key
Header valueYour API key

Attach the node to an AI Agent node and the tools become available to it. If your version of the node offers no header field, use the query string form of the URL instead.

Any other agent or framework

Anything that speaks MCP over HTTP will work. The shape of the configuration is always the same: an address, and one header.

{
  "name": "corenexis",
  "transport": "streamable-http",
  "url": "https://api.corenexis.com/mcp/server",
  "headers": { "x-api-key": "your_api_key" }
}
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

URL = "https://api.corenexis.com/mcp/server"
HEADERS = {"x-api-key": "your_api_key"}

async with streamablehttp_client(URL, headers=HEADERS) as (read, write, _):
    async with ClientSession(read, write) as session:
        await session.initialize()
        tools = await session.list_tools()
        print([t.name for t in tools.tools])

        result = await session.call_tool(
            "email_validate", {"email": "someone@example.com"}
        )
        print(result.content[0].text)
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport }
  from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const transport = new StreamableHTTPClientTransport(
  new URL("https://api.corenexis.com/mcp/server"),
  { requestInit: { headers: { "x-api-key": "your_api_key" } } }
);

const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map(t => t.name));

const out = await client.callTool({
  name: "markdown_to_pdf",
  arguments: { markdown: "# Invoice\n\nThank you." }
});
console.log(out.content[0].text);

6. Available APIs

All 9+ CoreNexis APIs are reachable through the server. Each one is subscribed to separately; the last column is where to do that.

APIWhat it doesToolsLinks
Markdown to PDF stable
markdown-to-pdf
Turn Markdown into a print-ready PDF or page images. markdown_to_pdf
API docs
Subscribe
HTML to PDF stable
html-to-pdf
Render HTML and CSS to a PDF or a screenshot with a real browser engine. html_to_pdf
API docs
Subscribe
Image to Text (OCR) stable
image-ocr
Read the text out of a photograph or screenshot. image_to_text
API docs
Subscribe
PDF to Text (OCR) stable
pdf-to-text
Extract the text of a PDF, including scanned pages. Runs as a job. pdf_to_text
pdf_to_text_status
API docs
Subscribe
Email Validator stable
email-validator
Check whether an email address is real, deliverable and safe to use. email_validate
API docs
Subscribe
Disposable Email Detector stable
disposable-email-validator
Tell a throwaway or temporary address from a real one. disposable_email_check
API docs
Subscribe
Image Conversion stable
image-conversion
Convert an image between formats, and resize or compress it. image_convert
API docs
Subscribe
Image CDN stable
image-cdn
Host an image and get a fast delivery link back. image_cdn_upload
API docs
Subscribe
QR Code and Barcode available
qr-barcode
Generate a QR code, a UPI payment code or a retail barcode. qr_barcode_generate
API docs
Subscribe

Not sure what you can use? Ask your agent to call corenexis_list_apis for the catalogue, then corenexis_api_details for a specific API. The second one tells you whether your key is subscribed, which plan it is on, and how much quota is left, without spending a monthly call.

7. Tool reference

14 tools in total. Argument names match the REST parameters exactly, so anything written against an API's own documentation works here unchanged.

corenexis_list_apis free

List every CoreNexis API reachable through this server, with what each one does, which tools it provides, its documentation link and where to subscribe. Costs nothing and needs no subscription. Call this first if you are not sure which tool to use.

Takes no arguments.
corenexis_account free

Check the API key in use and describe the account behind it: whether the key is valid, who owns it, how many APIs are subscribed to, the wallet balance, and anything currently due for payment. Start here when a call has been refused and you need to know whether the key, the subscription or the quota is at fault. Costs nothing and spends no quota.

Takes no arguments.
corenexis_subscriptions free

List every API this key is subscribed to, with the plan, the status, what it costs a month, when it renews, how many calls have been used this month against the limit, and whether any payment is due. Use this to answer questions about usage, renewals or bills. Costs nothing.

Takes no arguments.
corenexis_api_details free

Everything about one CoreNexis API: what it does, every plan with its price, features and limits, and where this key stands on it. Use this when asked what an API offers, which plan to pick, or what a plan includes. This counts as one request against that API per-minute rate limit, the same as a real call, but never spends a monthly call.

api*
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
markdown_to_pdf markdown-to-pdf

Convert Markdown into a PDF, or into page images. Tables, task lists and syntax highlighted code all render correctly, and documents of a thousand pages are handled. The result comes back as a hosted link, not as file content, so pass the link on rather than trying to read the bytes. Uses one call from your markdown-to-pdf quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

markdown*formatpage_sizeorientationmargin_topmargin_rightmargin_bottommargin_leftfilenamepng_dpipng_pagefontmono_fontfont_sizepaletteheader_textfooter_text
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
html_to_pdf html-to-pdf

Render HTML and CSS to a PDF, or capture it as an image, using a real browser engine. Use this rather than markdown_to_pdf when you already have markup, need web fonts, or need JavaScript to run before the capture. The result comes back as a hosted link. Uses one call from your html-to-pdf quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

html*formatpage_sizeorientationmargin_topmargin_rightmargin_bottommargin_leftfilenamepng_dpipng_pagepng_modescalewait_msjswidthheightheader_htmlfooter_html
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
image_to_text image-ocr

Read the text out of an image: a photograph, a screenshot, a scanned page or a receipt. Returns the text both as plain text and as Markdown with the layout preserved. Give it a public image URL, which is the simplest way, or base64 image data. Uses one call from your image-ocr quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

image_urlimage_base64lang
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
pdf_to_text pdf-to-text

Extract the text of a PDF, including pages that are scanned images. This runs as a background job: the call returns a job_id straight away, and you then call pdf_to_text_status with that id to collect the result. A long document may take a minute or more. Uses one call from your pdf-to-text quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

pdf_urlpdf_base64langoutput_formatextract_pageswebhook_url
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
pdf_to_text_status pdf-to-text

Collect the result of a pdf_to_text job, or see how far it has got. Call it with the job_id the submission returned. Checking a job does not spend another call from your quota.

job_id*
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
email_validate email-validator

Check one email address thoroughly: whether the syntax is valid, the domain exists, it accepts mail, and whether it looks risky or throwaway. Use this before adding an address to a mailing list or accepting a signup. Uses one call from your email-validator quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

email*
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
disposable_email_check disposable-email-validator

Say whether an address belongs to a disposable or temporary mail provider. Lighter and faster than email_validate when that single question is all you need. Uses one call from your disposable-email-validator quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

email*
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
image_convert image-conversion

Convert an image to another format and optionally resize or compress it. Handles the ordinary web formats along with HEIC, TIFF, PSD, AVIF and more. The converted image comes back as a hosted link. Uses one call from your image-conversion quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

image_urlbase64format*widthheightquality
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
image_cdn_upload image-cdn

Host an image and get a delivery link back, optionally resizing or compressing it on the way in. Use this when you have an image and need a URL for it; use image_convert instead when the point is the format change. Give it a public URL, or the image itself as base64 when it is a local file. Uses one call from your image-cdn quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

image_urlimage_base64widthheightqualityduration
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.
qr_barcode_generate qr-barcode

Generate a QR code, a UPI payment QR, or a retail barcode in Code 128, EAN-13 or UPC-A. Returns a hosted image link by default. Uses one call from your qr-barcode quota. If your key is not subscribed to this API the call is refused and tells you where to subscribe; nothing is charged.

type*dataoutputsizeimage_urlpapnamtn
Marked * is required. Hover an argument for what it means, or see that API's own documentation for the full detail.

Results that are files come back as links. A converted PDF, an image or a generated code is delivered as a hosted URL rather than as file content, because file bytes cannot travel usefully through a tool result. Pass the link on, or download it. Link lifetime depends on your plan.

8. Sending files and images

A tool call carries JSON, not bytes. There is no field anywhere in the Model Context Protocol that a raw file can be poured into, so an agent cannot hand a local file straight to a tool. That is worth knowing before you try, because the failure looks like a missing parameter rather than a limit of the protocol.

There are three ways to get a file in, and which ones a tool accepts depends on the API behind it.

ToolPublic URLBase64What to do with a local file
image_to_textimage_urlimage_base64Send it as base64.
pdf_to_textpdf_urlpdf_base64Send it as base64.
image_convertimage_urlbase64Send it as base64. The result comes back as a hosted link.
image_cdn_uploadimage_urlimage_base64Send it as base64.
qr_barcode_generateimage_url, for type: "image"not supportedHost the picture first, then pass its URL.
markdown_to_pdf, html_to_pdfNeither. The document is text, sent in markdown or html.Nothing to do: paste the content.

1. A public URL, whenever you have one

Always the best option. Nothing large travels through the conversation, and every file-taking tool accepts one.

2. Base64, for a small local file

Encode the bytes and pass them in the base64 field. A data URI prefix is fine and is stripped for you. Two things to keep in mind: base64 is about a third larger than the file, and every byte of it passes through the model's context, so keep this for files of a few megabytes at most.

3. The chain, when a tool wants a URL and you only have bytes

The QR image mode takes a URL and nothing else. The way round it is image_cdn_upload or image_convert: both accept base64 and return a hosted link, which then satisfies anything that wants a URL:

Two calls
// 1. bytes in, hosted link out
image_cdn_upload { "image_base64": "iVBORw0KGgo..." }
   -> { "data": { "url": "https://cdn.corenexis.com/..." } }

// 2. that link now works anywhere a URL is wanted
qr_barcode_generate { "type": "image", "image_url": "https://cdn.corenexis.com/..." }

Each call spends one request from that API's quota, so the chain costs two.

4. Straight to REST, for anything large

The APIs themselves accept ordinary multipart uploads, and nothing stops you using them directly for the upload and the MCP tools for everything else. This is the right route for a large PDF or a high resolution photograph.

cURL
curl -X POST "https://api.corenexis.com/image-cdn/v3" \
  -H "x-api-key: your_api_key" \
  -F "image=@/path/to/photo.jpg"

Take the url out of the response and give that to any tool.

Results come back the same way. A converted image, a generated PDF or a QR code is returned as a hosted link, never as file content, for exactly the same reason. Pass the link on, or fetch it yourself. How long the link lives depends on your plan.

9. Try it with curl

Useful for confirming a key works before wiring up an agent.

List the tools

cURL
curl -X POST "https://api.corenexis.com/mcp/server" \
  -H "x-api-key: your_api_key" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Call a tool

cURL
curl -X POST "https://api.corenexis.com/mcp/server" \
  -H "x-api-key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"email_validate",
                 "arguments":{"email":"someone@example.com"}}}'

Check what your key can reach

cURL
curl -X POST "https://api.corenexis.com/mcp/server" \
  -H "x-api-key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
       "params":{"name":"corenexis_api_details",
                 "arguments":{"api":"markdown-to-pdf"}}}'

10. Errors and what to do

A failed tool call comes back as a readable sentence rather than a code, so an agent can act on it instead of retrying the same failing call. These are the ones you are likely to meet.

What you seeWhyFix
Authorisation failed: no API key was sentThe client is not sending the header, or is stripping it.Add x-api-key. If the client cannot set headers, use the query string form.
Authorisation failed: the API key was not acceptedThe key is wrong, truncated, or has stray whitespace.Copy it again from the dashboard, whole.
That API key has been switched offThe key was disabled in the dashboard.Re-enable it, or create a new one.
Not subscribed: this key does not have a subscription to that APIKeys are per account, subscriptions are per API. This is the most common one.Subscribe to that API from the dashboard. Nothing was charged for the refused call.
The subscription is no longer activeExpired, cancelled, or awaiting a billing action.Renew it on the API's dashboard page.
Rate limit reachedToo many calls in one minute for your plan.Wait a minute, or move to a larger plan. Retrying at once fails the same way.
Monthly quota used upThe plan's monthly allowance is spent.Wait for the next billing period, or upgrade.
That request goes beyond what your plan allowsA per-plan limit, such as file size or output resolution.Reduce the request, or upgrade. The message names the limit reached.
The API could not be reachedA transient problem on our side.Check the health endpoint and retry shortly.

A refused call costs nothing. If a call is rejected for authentication, subscription or quota, no monthly call is deducted. Work that fails part way through is not charged either.

11. Status and version

The health endpoint is public and needs no key, precisely because the moment you want it is when your credentials are in doubt. It answers 200 with a small JSON body while the server is serving, and is cheap enough to poll from a monitor.

GEThttps://api.corenexis.com/mcp/health

Response
{
  "status": "up",
  "service": "CoreNexis MCP server",
  "version": "1.0.0",
  "endpoint": "https://api.corenexis.com/mcp/server",
  "transport": "streamable-http",
  "protocol": "2025-06-18",
  "apis": 9,
  "tools": 14,
  "checked_at": "2026-10-01T08:13:12+00:00"
}
ItemValue
Current statusOperational
Server version1.0.0
Last updated7 September 2026
APIs exposed9
Tools published14

12. Questions

Does using the MCP server cost more than calling the REST API?

No. A tool call is one REST call, charged the same way against the same plan. The server adds no fee of its own, and the tools that only report on your account (corenexis_list_apis, corenexis_account and corenexis_subscriptions) cost nothing at all.

Do I need a separate key for this?

No. Use the same key you use for REST. If you would rather a particular agent had its own key so you can withdraw it independently, create a second key in the dashboard; both work identically.

Why can I see a tool I am not allowed to call?

The tool list is the same for everyone, because working out what you are subscribed to would mean querying every API on every connect. Instead, a tool you are not subscribed to refuses the call and tells you where to subscribe. Call corenexis_api_details first if you want to know in advance.

Can I send a file to a tool?

Not as raw bytes, and that is a limitation of tool calls generally rather than of this server. Every tool that takes a file accepts a public URL instead, which is the easier path anyway, and most also accept base64 for small inputs. If your file is not online yet, image_cdn_upload will host it and hand you a URL to feed the next tool.

Why does pdf_to_text not return the text straight away?

Reading a scanned PDF can take a while, longer than a tool call should be held open for. The submission returns a job id, and pdf_to_text_status collects the result when it is ready. Checking a job does not spend another call.

Is my data stored here?

This server keeps nothing. It passes your request to the API and the answer back. What each API retains, and for how long, is described in that API's own documentation.

A new API was added to CoreNexis. Do I have to change anything?

No. New APIs appear as new tools automatically; your agent picks them up the next time it lists the tools. Your configuration stays as it is.

Give your agent 9+ APIs in one line of configuration

Create a free account, copy your key, and paste the server address into whatever you are building with.

Stay in the loop

New APIs, features and offers, straight to your inbox. No spam.

Already subscribed? Manage preferences