SocketLabs runs two HTTP surfaces: an Injection API at v1 that does nothing but send mail, and a SocketLabs API at v2 for configuration, suppression, reporting and subaccounts. Both are plain JSON over HTTPS, both are wrapped by 8 first-party SDKs, and 5 of those have not shipped since 2023. On MCP the answer is unambiguous: there is no SocketLabs MCP server in 2026, official or community, so any agent workflow starts with a wrapper you write yourself.
Model Context Protocol lets an agent call a vendor API without a hand-rolled tool schema per endpoint: query bounces, add suppressions, send a test. SocketLabs ships nothing of the kind.
As of August 2026 no MCP server for SocketLabs exists anywhere, not in the vendor GitHub organisation (18 public repositories, none MCP-related), not in public directories, not from a third party. The closest artefact is the MCP server from Infobip, which acquired SocketLabs on 9 July 2026, but no documentation states it reaches SocketLabs relay, reporting or suppression. Agent access today means wrapping the two APIs yourself, both plain JSON over HTTPS, so a thin wrapper is a day of work.
Short by necessity: what exists, and what it covers.
Published by the parent company, which closed the acquisition on 9 July 2026. An Infobip product: no official page states it reaches SocketLabs servers or reports.
The realistic path in 2026. Expose 3 to 5 tools: send, query failures, list and add suppressions. Keep keys server-side.
The 5 documented surfaces: API v2, Injection, Event Webhooks, Marketing, Inbound parse. All JSON over HTTPS.
MCP availability is a proxy for how much attention a vendor still pays its developer surface. SocketLabs published nothing on Product Updates in all of 2026, the last entry dating to October 2025, and 5 of its 8 SDKs are dormant. If your roadmap includes agent-driven deliverability triage, budget to build it in-house; off the shelf, price Postmark and SendGrid against it, then weigh that against SocketLabs’ real strength, analytics depth and multi-provider observability.
The most expensive misunderstanding here is treating “the SocketLabs API” as one thing. It is two, with different base URLs, auth styles and lifecycles: Injection sends mail and nothing else; v2 does everything else and never sends mail.
| Injection API base URL | https://inject.socketlabs.com/api/v1/email DEFAULT |
| Injection API (CX gateway) | https://inject-cx.socketlabs.com/api/v1/email |
| Management API base URL | https://api.socketlabs.com/v2 |
| Versions in production | Injection v1 · management and reporting v2 |
| Decommissioned | Legacy v1 Reporting and Suppression APIs, end of March 2024 |
| Response format | JSON only |
| Pagination | pageSize and pageNumber query parameters |
| Sorting and dates | sortField, sortDirection, startDate and endDate (YYYY-MM-DD) |
| Server scoping | Path segment /v2/servers/{serverId}/ – moved out of the query string in v2 |
| Bulk send | Supported – Messages array plus MergeData in a single POST |
Pagination is offset-based and returns no link headers, so rows shift between pages when events land mid-export. Where a stable snapshot matters, bound every query with explicit dates and treat the window, not the page, as your unit of idempotency.
SocketLabs issues three unrelated credentials with different scopes. None substitutes for another, and getting this wrong is the platform’s signature failure.
The classic Injection API takes a numeric serverId and a string APIKey, both inside the JSON body, not in a header. Every SDK constructor mirrors this: SocketLabsClient(serverId, apiKey). The credential travels in the payload, so it lands in request-body logs.
The SocketLabs API at https://api.socketlabs.com/v2 uses a standard Authorization: Bearer header. The v2 migration consolidated the formerly separate Reporting and Suppression keys into this one. The newer inject-cx gateway also uses Bearer auth, a signal of where the platform is heading.
A third username and password pair drives the relay at smtp.socketlabs.com. The username is issued, not chosen, in the form server12345 – server plus your numeric Server ID. Provision it under Configuration › SMTP Credentials.
Event Webhooks are inbound, so there is no request to authenticate. SocketLabs puts a SecretKey and ServerId in the POST body; return 401 on mismatch, 200 otherwise. Validation traffic comes from 52.152.150.178, production from 142.0.176.0/20.
Pasting an Injection API key into an SMTP password field returns 501 5.7.0 – Authentication failed. The error is correct and the credential is valid, just for a different surface. Identify which one you hold: Server ID plus key means Injection, a bare token means v2, a server12345 username means SMTP.
SocketLabs publishes firm structural ceilings and no throughput ceiling at all. The table separates the two: numbers you can design against, and numbers you cannot.
| Limit | Value | Enforcement |
|---|---|---|
| Message size | 40 MB total | Hard, returns 552 5.3.4 Message too big for system |
| Recipients per message | 500 | Hard, documented cap |
| Simultaneous SMTP connections | 20 per account | Hard, returns 421 4.4.5 Too many connections from your host |
| Messages per SMTP connection | 50 recommended | Advisory, throughput guidance, not enforced |
| New-account send throttle | Not published | Automatic during warm-up; lifts as mailbox providers learn your domain and IP |
Two absences matter. No request-rate limit is documented for either API: no headers, no described 429 behaviour, so you cannot derive a back-off strategy from the docs and must retry exponentially on 5xx. And the new-account throttle is real but unquantified, the docs say only that it lifts automatically, that complaints and bounces prolong it, and that it “can be adjusted by opening a support ticket.” Migrating an established stream? Open that ticket before cutover.
The workaround for the 20-connection ceiling is pipelining, not parallelism: SocketLabs recommends command pipelining and 50 messages per connection. Beyond that, the Injection API takes a Messages array and skips the connection model.
SocketLabs maintains 8 client libraries, all wrappers over the Injection API. None covers the v2 management and reporting surface, which you call with a plain HTTP client. The maintenance picture is uneven enough to shape language choice.
| Language | Package | Install | Status |
|---|---|---|---|
| C# / .NET | SocketLabs.InjectionApi | dotnet add package SocketLabs.InjectionApi | Active – May 2026 |
| Go | socketlabs-go | go get github.com/socketlabs/socketlabs-go | Active – February 2026 |
| Java | com.socketlabs injection-api | Maven or Gradle artifact, see README | Maintained – July 2025 |
| Node.js | @socketlabs/email | npm install --save @socketlabs/email | Dormant – January 2024 |
| PHP | socketlabs/injection-api | composer require socketlabs/injection-api | Dormant – December 2023 |
| Python | socketlabs-injectionapi | pip install socketlabs-injectionapi | Dormant – v1.4.4, October 2023 |
| Ruby | socketlabs-injectionapi | gem install socketlabs-injectionapi | Dormant – October 2023 |
| PowerShell | socketlabs-powershell | Module import, see repo README | Dormant – June 2023 |
Node.js, PHP, Python, Ruby and PowerShell have all gone over two years without a release. Python still sits at v1.4.4, final changelog entry “Added MetadataOrTagsAreTooLarge error message.” Ruby is not listed on the API Libraries page at all, which names only 6 of 8. None are broken, the Injection API is a stable v1 contract, but they will not carry you to the inject-cx gateway.
There is none worth naming. Unlike Mailgun, whose API attracted independent Rust, Elixir and Laravel clients, SocketLabs never drew third parties in to fill the gaps left by its dormant libraries. The practical community layer is framework-level: the WordPress.org plugin and the first-party ASP.NET Core webhook extensions for validating event POSTs.
The table covers the send path and the v2 management surface. Where the migration guide confirms a resource but never quotes its path, the column says so. Full docs: SocketLabs API introduction and the v1 to v2 migration guide.
| Resource | Method | Description |
|---|---|---|
| Send message inject.socketlabs.com/api/v1/email | POST | Primary send endpoint. Body carries serverId, APIKey and a Messages array; each needs To, From and Subject, with TextBody, HtmlBody, CC, BCC, CustomHeaders, Attachments and MergeData optional. |
| Send message, CX gateway inject-cx.socketlabs.com/api/v1/email | POST | Newer v2 gateway. Bearer header, not in-body keys. |
| Subaccount Injection credentials /v2/subaccount/:id/credentials/injection-api | POST | Creates or returns a subaccount Injection key. |
| Subaccount SMTP credentials /v2/subaccount/:id/credentials/smtp | POST | Creates or returns a subaccount SMTP credential; gives username, password, gateway host. |
| Subaccount bounce domain /v2/subaccount/:id/bounce | POST | Registers a bounce (Return-Path) domain; must already CNAME to tracking.socketlabs.com. |
| Subaccount engagement tracking /v2/subaccount/:id/engagement-tracking | POST | Sets the tracking domain, reusing the bounce CNAME. |
| Account-level event webhook /v2/event-webhook/:webhookID | GET, POST | Manages webhook endpoints; GET drives testing and Secret Key setup. |
| Suppressions, query /v2/servers/{serverId}/suppressions | GET | Reads a server suppression list. Supports paging and sort. |
| Suppressions, add /v2/servers/{serverId}/suppressions | POST | Adds addresses to the list. |
| Suppressions, remove /v2/servers/{serverId}/suppressions | DELETE | Removes addresses from the list. |
| Suppressions, bulk download path not published verbatim | GET | Confirmed in the migration guide; path not quoted. |
| Report: failed messages path not published verbatim | GET | Bounce and failure reporting. Accepts dates, paging, sort. |
| Report: queued messages path not published verbatim | GET | Messages held in the queue. |
| Report: processed messages path not published verbatim | GET | Messages accepted and processed. |
| Report: complaints and engagement path not published verbatim | GET | Complaints, suppressed items, opens, clicks. |
from socketlabs.injectionapi import SocketLabsClient
from socketlabs.injectionapi.message.basicmessage import BasicMessage
from socketlabs.injectionapi.message.emailaddress import EmailAddress
# serverId is an integer; the API key is NOT your SMTP password
client = SocketLabsClient(10000, "YOUR-API-KEY")
message = BasicMessage()
message.subject = "Test"
message.html_body = "<html>Message body</html>"
message.from_email_address = EmailAddress("from@example.com")
message.to_email_address.append(EmailAddress("recipient@example.com"))
print(client.send(message).result)const { SocketLabsClient } = require('@socketlabs/email');
const client = new SocketLabsClient(
parseInt(process.env.SOCKETLABS_SERVER_ID),
process.env.SOCKETLABS_INJECTION_API_KEY
);
const message = {
to: 'recipient@example.com',
from: 'sender@example.com',
subject: 'Hello from Node.js',
textBody: 'Sent using the SocketLabs Node.js library.',
htmlBody: '<html>Sent using the SocketLabs Node.js library.</html>',
messageType: 'basic'
};
client.send(message)
.then(res => console.log(res))
.catch(err => console.error(err));curl -X POST https://inject.socketlabs.com/api/v1/email \
-H "Content-Type: application/json" \
-d '{
"serverId": 10000,
"APIKey": "YOUR-API-KEY",
"Messages": [{
"To": [{ "EmailAddress": "recipient@example.com" }],
"From": { "EmailAddress": "sender@example.com" },
"Subject": "Raw injection test",
"TextBody": "Sent without an SDK."
}]
}'
# Success: {"ErrorCode":"Success","MessageResults":[],"TransactionReceipt":"..."}# Bearer token here - NOT the Injection key, NOT the SMTP password curl -X GET \ "https://api.socketlabs.com/v2/servers/12345/suppressions?pageSize=100" \ -H "Authorization: Bearer YOUR-SOCKETLABS-API-KEY"
SMTP username and password, Injection serverId plus APIKey, and a v2 bearer token are generated separately and none substitutes for another. The signature failure is an Injection key in an SMTP password field, returning 501 5.7.0. Store all three under distinct names: one SOCKETLABS_API_KEY variable is how teams debug this at 2am.
The help center documents smtp.socketlabs.com and the C# SDK hardcodes inject.socketlabs.com. The v2 docs reference smtp-cx.socketlabs.com and inject-cx.socketlabs.com, the latter bearer-authenticated. Neither pair is marked deprecated. Use whichever hostname was handed to you for that credential, and never mix a v2 credential with a classic endpoint.
Both were decommissioned at the end of March 2024. A codebase still calling them is not degraded, it is dead. Migration is more than a base-URL change: serverId moved into the path, and the two keys became one.
Neither API publishes a request ceiling, rate-limit headers or 429 semantics. That is an absence of contract, not permission to hammer the endpoint. Back off exponentially on 5xx and connection resets, and cap concurrency yourself.
Infobip closed its purchase on 9 July 2026, terms undisclosed, citing SocketLabs analytics and vendor-agnostic observability for its Email Deliverability Agent. It said nothing about brand, pricing, roadmap, support or endpoint longevity, and no customer communication accompanied the close. Pricing still shows standalone plans; Product Updates published nothing in 2026. Read that as “nothing changed yet, nothing was promised”, on a multi-year commitment, get endpoint continuity in writing.
Sources: SocketLabs Product Updates and the v1 to v2 migration guide.
The classic endpoint is https://inject.socketlabs.com/api/v1/email, the default in the C# SDK. Auth is a numeric serverId plus a string APIKey, both inside the JSON body, not in a header. A newer gateway at https://inject-cx.socketlabs.com/api/v1/email uses Authorization: Bearer. Neither is deprecated, so use whichever matches your issued credential.
Three unrelated credentials. The Injection API key is a serverId and key pair used only for sending, and is what every SDK constructor takes. The SocketLabs API key is a bearer token for https://api.socketlabs.com/v2, covering configuration, suppression, reporting and subaccounts. The SMTP credential is a relay username and password, issued as server12345. The wrong one on SMTP returns 501 5.7.0.
Eight: C# / .NET, Go, Java, Node.js, PHP, Python, Ruby and PowerShell. Only C# (May 2026) and Go (February 2026) are actively maintained; Java last shipped July 2025. Node.js, PHP, Python (still 1.4.4), Ruby and PowerShell are dormant since 2023 or 2024. All still work, but on a dormant language, calling the HTTP API directly is reasonable.
Call https://api.socketlabs.com/v2/servers/{serverId}/suppressions with Authorization: Bearer. GET queries with pageSize, pageNumber, sortField and sortDirection; POST adds, DELETE removes. Critical detail: serverId lives in the path in v2, not the query string. The v1 Suppression API died end of March 2024.
No. Neither API publishes a request ceiling, rate-limit headers or 429 behaviour. What is published are structural SMTP limits: 40 MB message size, 500 recipients per message, 20 simultaneous connections, 50 messages per connection recommended. New accounts also carry an unquantified warm-up throttle, adjustable by support ticket, open one before a high-volume migration, not after.
No, there is no SocketLabs MCP server, official or community, as of August 2026. The socketlabs GitHub organisation holds 18 repositories, none MCP-related, and public directories list nothing. Parent company Infobip publishes its own MCP server, but no documentation says it exposes SocketLabs relay, reporting or suppression. The practical route is wrapping the two APIs yourself; off the shelf, compare Postmark first.
This review follows our email infrastructure testing methodology. We disclose affiliate relationships in our editorial independence policy.