Connect Blogent to AI assistants via MCP
The Blogent remote MCP server lets a compatible AI assistant work with your account after browser authorization. From the conversation it can inspect projects by domain, create or update blog settings, manage custom topics and shortcodes, check subscription status, present billing periods, and prepare a direct Stripe Checkout link when you explicitly choose a plan.
How to connect Blogent to Model Context Protocol
Manage Blogent from the conversation
Add the Blogent remote MCP server once. Your AI assistant will open Blogent for secure browser authorization and then expose only the project and billing actions you approve.
-
Add a custom MCP connector
Open the connector or integrations settings in your AI client, choose to add a remote MCP server, and paste the Blogent MCP URL shown below.
-
Sign in and approve access
Complete the Blogent login in the browser window and review the requested project and billing permissions before connecting.
-
Describe the blog you want
Ask the assistant to inspect existing projects first, then discuss the domain, company context, languages, custom topics, images, and optional CMS shortcodes.
-
Choose billing explicitly
After the project is ready, ask for the current plans. Select a billing period yourself; only then can the assistant return a direct Stripe Checkout link.
Paste this exact HTTPS address into your AI client. Opening it as a normal webpage is not the connection flow.
https://blogent.tools/mcp
Access is split into projects:read, projects:write, billing:read, and billing:write. You approve the requested scopes on Blogent, and payment status changes only after Stripe confirms payment.
Developer integration reference
This section is the implementation contract for a custom MCP client. A standard client can use discovery automatically; a custom client should follow the OAuth and JSON-RPC sequence below.
Connection contract
- MCP endpoint
https://blogent.tools/mcp- Transport
- Streamable HTTP over HTTPS. Send each JSON-RPC message with
POST.GETreturns405; this server does not expose an SSE listener. - Protocol revisions
2025-06-18,2025-11-25, and2026-07-28. If sent,MCP-Protocol-Versionmust be one of these values.- Authentication
Authorization: Bearer <access_token>. Missing or expired credentials return401with a protected-resource metadata link.- Content
- UTF-8 JSON-RPC 2.0. Send
Content-Type: application/jsonandAccept: application/json, text/event-stream; Blogent responds with JSON. - Capabilities
- Tools only. No resources, prompts, sampling, or server-initiated notifications.
OAuth authorization-code flow
Use a public OAuth client with PKCE S256. Preserve and verify state, and send the exact canonical MCP URL as resource in both authorization and token requests.
- Request protected-resource and authorization-server metadata from the two well-known URLs.
- Register the client with
POST /oauth/register. Redirect URIs must use HTTPS, except HTTP is accepted for localhost loopback addresses. - Generate a 43–128 character PKCE verifier, derive its SHA-256 base64url challenge, and open
GET /oauth/authorizein the user’s browser. - After approval, verify
stateand exchange the returned one-timecodeatPOST /oauth/token. Authorization codes expire after 10 minutes. - Store tokens securely. Access tokens expire after 3600 seconds. Refresh with
grant_type=refresh_token; every refresh rotates and invalidates the previous refresh token. - Revoke either token with
POST /oauth/revokewhen disconnecting the account.
OAuth endpoint reference
| Method | Path | Purpose |
|---|---|---|
GET | /.well-known/oauth-protected-resource | Resource identifier, authorization server, scopes, and bearer method. |
GET | /.well-known/oauth-authorization-server | Issuer and authorization, token, registration, and revocation endpoints. |
POST | /oauth/register | Dynamic registration for a public client. Limit: 20 requests per minute. |
GET / POST | /oauth/authorize | Browser sign-in and consent. The POST is submitted by Blogent’s consent form. |
POST | /oauth/token | Exchange an authorization code or rotate a refresh token. Limit: 60 requests per minute. |
POST | /oauth/revoke | Revoke an access or refresh token. Limit: 60 requests per minute. |
Copyable protocol examples
Replace uppercase placeholders. OAuth form endpoints accept standard form fields; MCP calls use JSON.
1. Register a public client
curl -X POST "https://blogent.tools/oauth/register" \
-H "Content-Type: application/json" \
--data '{
"client_name": "Acme MCP Client",
"redirect_uris": ["https://client.example.com/oauth/callback"],
"grant_types": ["authorization_code", "refresh_token"],
"response_types": ["code"],
"token_endpoint_auth_method": "none"
}'
2. Open the authorization URL
GET https://blogent.tools/oauth/authorize
?response_type=code
&client_id=CLIENT_ID
&redirect_uri=https%3A%2F%2Fclient.example.com%2Foauth%2Fcallback
&scope=projects%3Aread%20projects%3Awrite%20billing%3Aread%20billing%3Awrite
&state=RANDOM_OPAQUE_STATE
&code_challenge=BASE64URL_SHA256_OF_VERIFIER
&code_challenge_method=S256
&resource=https%3A%2F%2Fblogent.tools%2Fmcp
3. Exchange the code
curl -X POST "https://blogent.tools/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=authorization_code" \
--data-urlencode "client_id=CLIENT_ID" \
--data-urlencode "code=AUTHORIZATION_CODE" \
--data-urlencode "redirect_uri=https://client.example.com/oauth/callback" \
--data-urlencode "code_verifier=PKCE_VERIFIER" \
--data-urlencode "resource=https://blogent.tools/mcp"
4. Initialize and discover tools
curl -X POST "https://blogent.tools/mcp" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"acme-client","version":"1.0.0"}}}'
curl -X POST "https://blogent.tools/mcp" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
--data '{"jsonrpc":"2.0","method":"notifications/initialized"}'
curl -X POST "https://blogent.tools/mcp" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
--data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
5. Call a tool
curl -X POST "https://blogent.tools/mcp" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
--data '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "create_project",
"arguments": {
"domain": "example.com",
"company": "Example",
"languages": ["en"],
"company_description": "Factual context approved by the customer."
}
}
}'
Tool input reference
Always treat the current tools/list response as the machine-readable source of truth: it includes inputSchema, outputSchema, and behavior annotations for every tool.
| Tool / scope | Input | Output | Retry behavior |
|---|---|---|---|
get_blog_setup_guideauthenticated |
No arguments. | Workflow, required creation fields, optional features, shortcode modes, and billing rules. | Read-only; safe to retry. |
list_projectsprojects:read |
No arguments. | projects[] with domain, company, status, ownership, timestamps, and subscription summary. |
Read-only; safe to retry. |
get_projectprojects:read |
Required domain: string. |
Detailed project, settings, shortcode configuration, and subscription status. |
Read-only; safe to retry. |
create_projectprojects:write |
Required domain, company, and languages; optional project fields listed below. |
Created unpaid project and a next_actions instruction to list plans. |
Do not blindly retry after a timeout; call get_project first. Duplicate domains are rejected. |
update_projectprojects:write |
Required domain and non-empty changes containing only listed project fields. |
Persisted detailed project. |
Same payload is safe in effect, but confirm persisted state with get_project. |
list_custom_topicsprojects:read |
Required domain: string. |
domain and ordered topics[] containing index and title. |
Read-only; safe to retry. |
add_custom_topicsprojects:write |
Required domain and 1–100 topics. Each title: max 500 characters, at least 4 words and 18 characters. |
The complete topic list after unique titles are appended. | Idempotent by case-insensitive title deduplication. |
list_billing_plansbilling:read |
Required domain: string. |
Subscription plus all plans: period, months, total, original total, monthly rate, currency, and discount percent. | Read-only; safe to retry. Fetch immediately before presenting prices. |
create_checkout_linkbilling:write |
Required domain and billing_period: monthly, quarterly, semi_annual, or annual. |
Direct checkout URL, expiry, period, months, amount, currency, and reused. |
Retry-safe for the same active attempt and period. Never switch periods while another checkout is open. |
Project field reference
Unknown fields are rejected. create_project requires the first four fields; update_project.changes accepts any non-empty subset except domain.
| Field | Type and validation |
|---|---|
domain | Root domain string. Scheme and www are removed; paths, query strings, fragments, and credentials are rejected. |
company | String, maximum 50 characters. |
languages | Array of 1–3 strings; each maximum 50 characters. |
company_description / advantages | Nullable strings, maximum 1000 characters each. |
region | Nullable string, maximum 200 characters. |
services / categories | Nullable strings, maximum 2500 characters each. Cleared when landing_without_pages is true. |
landing_without_pages / strict_mode / generate_inline_images | Boolean values. |
knowledge_base | Nullable factual content, maximum 50,000 characters. |
product_params | Nullable string, maximum 1200 characters. |
parameters_description | Nullable string, maximum 1500 characters. |
rubrics | Nullable string, maximum 255 characters. |
sitemap_url | Nullable absolute URL, maximum 500 characters. |
image_source | One of: stock, custom, ai. |
image_categories | Nullable string, maximum 500 characters. |
shortcodes | Object with mode universal or per_target. Universal accepts one string up to 1000 characters. Per-target accepts up to 100 {target_url, shortcode} pairs. |
Response envelope
Successful tool execution returns both human-readable content and machine-readable structuredContent. Business and validation failures are tool results with HTTP 200 and result.isError=true. Protocol failures use a JSON-RPC error object.
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{"type": "text", "text": "Project created without charging the user. Present billing plans next."}],
"structuredContent": {"project": {}, "next_actions": []},
"isError": false
}
}
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [{"type": "text", "text": "The connected account did not grant the projects:write scope."}],
"isError": true
}
}
Errors, retries, and idempotency
| Signal | Client action |
|---|---|
HTTP 401 / JSON-RPC -32001 | Access token is missing, expired, or revoked. Run discovery and OAuth, or refresh the token once. |
HTTP 403 / JSON-RPC -32002 | The browser Origin is not allowed. Server-to-server clients should omit Origin; approved browser origins must be configured exactly. |
HTTP 400 / JSON-RPC -32600 | Malformed JSON-RPC request or unsupported MCP protocol version. Correct the request; do not retry unchanged. |
JSON-RPC -32601 / -32602 | Unknown method/tool or invalid call envelope. Refresh tools/list and correct the request. |
HTTP 200 / result.isError=true | Business or validation failure. Show result.content[0].text to the model/user and follow its recovery instruction. |
HTTP 429 | Registration or token rate limit reached. Respect Retry-After and use exponential backoff with jitter. |
HTTP 5xx or network timeout | Retry reads with backoff. Before retrying a project write, read the project; checkout retries must reuse the same domain and billing period. |
- MCP manages Blogent project content settings, custom topics, subscription visibility, and checkout creation. CMS credentials and publishing connectors are configured in the Blogent dashboard.
- Team-shared projects are readable through MCP, but only the owner can update them or manage billing.
- Creating a checkout link never means payment succeeded. Only
get_project.subscription.is_paidafter Stripe webhook processing is authoritative. - The server exposes no delete operation and never silently falls back to another data source or project.
End-to-end acceptance checklist
- Discovery returns the production HTTPS issuer, MCP resource, endpoints, and supported scopes.
- Dynamic registration succeeds and the client validates its OAuth
stateand PKCE verifier. - Token exchange, one refresh rotation, and revocation are verified without logging raw tokens.
initialize(for 2025 revisions) andtools/listsucceed with the bearer token; every tool has input and output schemas.- A read-only call succeeds, while a missing scope produces
result.isError=true. - A test project is created only after confirmation, then read back and updated by normalized domain.
- Custom topics append without deleting existing titles and duplicate titles are ignored.
- All billing plans are shown before the user explicitly selects a period.
- Stripe test checkout is created, a same-period retry is reused, and payment is reported only after webhook confirmation.
- Disconnect revokes the token, and subsequent MCP access returns
401.
Protocol background: Streamable HTTP, MCP authorization, and the MCP schema. Blogent behavior on this page takes precedence for this endpoint.
V2 actions and stable identities
- Shopify, HubSpot, Webflow and Framer use the connected native publisher. WordPress, OpenCart, Strapi and Lovable use the installed V2 connector; v0 and Replit adapt it to the existing app. Wix, Make, n8n and custom endpoints implement the synchronous contract; Zapier, Albato and ApiX-Drive use completion callbacks.
inventory: sendcursor: nullandlimit; return{articles: [snapshot], next_cursor: string|null}. Repeat the returned cursor until null.read: sendtargetand/orcontent_id; return{article_snapshot: snapshot}. Explicit nativetargetis authoritative. Blogent’s logicalcontent_idmay differ from the native identity.- Each snapshot contains
identity, title, alias, date, article, target, revision, urlsand optional image/author metadata.articlemaps locales to full title, alias, HTML, preview and SEO fields. Unknown original dates may be null and unavailable URLs may be an empty map. create: send the article payload, a uniqueoperation_id, logicalcontent_id, empty target and null expected revision. Return{posted:true,target,revision,urls}after complete publication.update: send existing native target IDs and the latestexpected_revision. Preserve original IDs, URLs/aliases, publication date, author and assets. Compare the revision atomically before applying changes.
What you get after connecting Model Context Protocol
- Sign in on Blogent’s own OAuth screen; the MCP client never receives your Blogent password.
- Find, create, and update projects by root domain without navigating between dashboard forms.
- Discuss company context, article languages, custom topics, image settings, and CMS shortcodes before saving them.
- See whether a subscription is paid and its paid-through date directly in the conversation.
- Review every available billing period before choosing; checkout is never created from an assumed commitment.
Requirements and compatibility
- Client
- Claude or another client that supports remote MCP servers with browser OAuth.
- Account
- A Blogent account. Sign-in and consent happen in the browser opened by the MCP client.
- Server URL
https://blogent.tools/mcp. Paste this exact address when adding the custom connector.- Permissions
- Separate read/write scopes for projects and billing. Team-accessible projects are read-only; only the owner can edit or open checkout.
- Payment
- The assistant must show the available periods and wait for your explicit choice before creating a Stripe Checkout link.
Frequently asked questions about the Model Context Protocol integration
Does the AI assistant see my Blogent password?
No. Authentication happens on Blogent’s browser sign-in and consent screens. The client receives a scoped access token, not your password.
What can I manage through MCP?
Projects and their settings, custom article topics, shortcodes, subscription status, current billing options, and creation of a direct Stripe Checkout link after you select a period.
Can the assistant charge me automatically?
No. It must present the current billing periods and wait for your explicit choice. The returned Stripe link still requires you to complete checkout.
Can a team member edit a shared project?
Shared projects can be inspected through MCP, but only the project owner can change settings or manage billing.