Blogent

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.

  1. 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.

  2. Sign in and approve access

    Complete the Blogent login in the browser window and review the requested project and billing permissions before connecting.

  3. 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.

  4. 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.

Remote MCP server URL

Paste this exact HTTPS address into your AI client. Opening it as a normal webpage is not the connection flow.

https://blogent.tools/mcp
Your account stays in control

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. GET returns 405; this server does not expose an SSE listener.
Protocol revisions
2025-06-18, 2025-11-25, and 2026-07-28. If sent, MCP-Protocol-Version must be one of these values.
Authentication
Authorization: Bearer <access_token>. Missing or expired credentials return 401 with a protected-resource metadata link.
Content
UTF-8 JSON-RPC 2.0. Send Content-Type: application/json and Accept: 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.

  1. Request protected-resource and authorization-server metadata from the two well-known URLs.
  2. Register the client with POST /oauth/register. Redirect URIs must use HTTPS, except HTTP is accepted for localhost loopback addresses.
  3. Generate a 43–128 character PKCE verifier, derive its SHA-256 base64url challenge, and open GET /oauth/authorize in the user’s browser.
  4. After approval, verify state and exchange the returned one-time code at POST /oauth/token. Authorization codes expire after 10 minutes.
  5. Store tokens securely. Access tokens expire after 3600 seconds. Refresh with grant_type=refresh_token; every refresh rotates and invalidates the previous refresh token.
  6. Revoke either token with POST /oauth/revoke when disconnecting the account.

OAuth endpoint reference

MethodPathPurpose
GET/.well-known/oauth-protected-resourceResource identifier, authorization server, scopes, and bearer method.
GET/.well-known/oauth-authorization-serverIssuer and authorization, token, registration, and revocation endpoints.
POST/oauth/registerDynamic registration for a public client. Limit: 20 requests per minute.
GET / POST/oauth/authorizeBrowser sign-in and consent. The POST is submitted by Blogent’s consent form.
POST/oauth/tokenExchange an authorization code or rotate a refresh token. Limit: 60 requests per minute.
POST/oauth/revokeRevoke 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 / scopeInputOutputRetry 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.

FieldType and validation
domainRoot domain string. Scheme and www are removed; paths, query strings, fragments, and credentials are rejected.
companyString, maximum 50 characters.
languagesArray of 1–3 strings; each maximum 50 characters.
company_description / advantagesNullable strings, maximum 1000 characters each.
regionNullable string, maximum 200 characters.
services / categoriesNullable strings, maximum 2500 characters each. Cleared when landing_without_pages is true.
landing_without_pages / strict_mode / generate_inline_imagesBoolean values.
knowledge_baseNullable factual content, maximum 50,000 characters.
product_paramsNullable string, maximum 1200 characters.
parameters_descriptionNullable string, maximum 1500 characters.
rubricsNullable string, maximum 255 characters.
sitemap_urlNullable absolute URL, maximum 500 characters.
image_sourceOne of: stock, custom, ai.
image_categoriesNullable string, maximum 500 characters.
shortcodesObject 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

SignalClient action
HTTP 401 / JSON-RPC -32001Access token is missing, expired, or revoked. Run discovery and OAuth, or refresh the token once.
HTTP 403 / JSON-RPC -32002The browser Origin is not allowed. Server-to-server clients should omit Origin; approved browser origins must be configured exactly.
HTTP 400 / JSON-RPC -32600Malformed JSON-RPC request or unsupported MCP protocol version. Correct the request; do not retry unchanged.
JSON-RPC -32601 / -32602Unknown method/tool or invalid call envelope. Refresh tools/list and correct the request.
HTTP 200 / result.isError=trueBusiness or validation failure. Show result.content[0].text to the model/user and follow its recovery instruction.
HTTP 429Registration or token rate limit reached. Respect Retry-After and use exponential backoff with jitter.
HTTP 5xx or network timeoutRetry reads with backoff. Before retrying a project write, read the project; checkout retries must reuse the same domain and billing period.
Integration boundaries
  • 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_paid after 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

  1. Discovery returns the production HTTPS issuer, MCP resource, endpoints, and supported scopes.
  2. Dynamic registration succeeds and the client validates its OAuth state and PKCE verifier.
  3. Token exchange, one refresh rotation, and revocation are verified without logging raw tokens.
  4. initialize (for 2025 revisions) and tools/list succeed with the bearer token; every tool has input and output schemas.
  5. A read-only call succeeds, while a missing scope produces result.isError=true.
  6. A test project is created only after confirmation, then read back and updated by normalized domain.
  7. Custom topics append without deleting existing titles and duplicate titles are ignored.
  8. All billing plans are shown before the user explicitly selects a period.
  9. Stripe test checkout is created, a same-period retry is reused, and payment is reported only after webhook confirmation.
  10. 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: send cursor: null and limit; return {articles: [snapshot], next_cursor: string|null}. Repeat the returned cursor until null.
  • read: send target and/or content_id; return {article_snapshot: snapshot}. Explicit native target is authoritative. Blogent’s logical content_id may differ from the native identity.
  • Each snapshot contains identity, title, alias, date, article, target, revision, urls and optional image/author metadata. article maps 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 unique operation_id, logical content_id, empty target and null expected revision. Return {posted:true,target,revision,urls} after complete publication.
  • update: send existing native target IDs and the latest expected_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.

Put your SEO blog on autopilot

Create a blog, connect Model Context Protocol, and Blogent will plan, write, link, and publish articles automatically.

Start now

Similar integrations