gentic

Gentic Content — Documentation

Give your AI agent your brand's voice. Feed it your existing writing, and the Content server builds a writing profile — a stylometric fingerprint, your brand lexicon, and an anti-slop calibration — then generates on-brand drafts from a brief, scored against that profile with a checkable scorecard. Learn the voice, build the profile, write the draft — all through the Model Context Protocol.

1. Getting Started

Sign Up & Get Your API Key

Before you can use Gentic Content, you need an API key to authenticate your requests.

  1. Go to gentic.co/content and create an account.
  2. Create an organization from your dashboard. API keys and billing are scoped to the organization.
  3. Generate an API key and use it as a Bearer token in your MCP client.

2. Connecting to the MCP Server

The server is available at https://mcp.gentic.co/content. For Claude Code:

claude mcp add gentic-content \
  --transport http \
  https://mcp.gentic.co/content \
  --header "Authorization: Bearer YOUR_API_KEY"

For Claude Web and ChatGPT you can also connect via OAuth — no API key needed. See the connect section on the landing page for other MCP clients (n8n, OpenClaw).

3. Agent Skill

For the best results, pair the MCP server with the Gentic Content agent skill. The MCP server gives your agent tool access; the skill teaches it the optimal workflow order. Both the raw SKILL.md and a ready-to-upload .skill bundle are generated on demand from the live manifest, so they always reflect the current tools and pricing.

Add the skill directly via URL:

https://gentic.co/content/SKILL.md

Or upload a .skill bundle to Claude Managed Agents:

https://gentic.co/content/gentic-content.skill

Download this file and upload it wherever Claude Managed Agents asks for a .skill file. It's a zip bundle generated on demand from the latest SKILL.md.

4. When to Apply

  • User wants to generate marketing copy, a blog post, email, or newsletter that sounds like their brand.
  • User wants to teach the system their brand voice from examples of their existing writing.
  • User wants an objective, checkable measure of whether a draft is on-brand.
  • User wants drafts screened for AI 'slop', near-duplicates of source material, or unsupported claims before shipping.
  • User wants to rebuild or update the brand's writing profile as their voice evolves.
  • User wants to feed on-brand drafts into a review, CMS, or publishing workflow.

5. Workflow

  1. 1. Build the corpus with `add_content_sample`

    Add examples of the brand's real writing — pass `text` (paste) OR a `url` to fetch (the article text is extracted and boilerplate stripped; review the returned preview). Tag each with its `content_type` (blog, email, newsletter, …). Both pasted and fetched samples need approval next. `add_content_sample` is **free**. List what's in the corpus with `list_content_samples` (free).

  2. 2. Approve extractions with `approve_content_sample`

    Approve each captured sample so it becomes eligible to build a profile. Only approved samples of a given `content_type` feed that type's profile — so approve deliberately, and keep off-voice or low-quality pieces out. `approve_content_sample` is **free**.

  3. 3. Build the profile with `build_writing_profile`

    Build (or rebuild) the writing profile for one voice + content type — **async, billed per build on completion (200¢)**. It runs anti-slop-first: filters the corpus to the slop-free subset, then computes the stylometric fingerprint + brand lexicon + on-voice calibration from that subset. Requires approved samples of that content type first. Returns a `job_id` — poll `get_content_jobs`, then read the result with `get_writing_profile` (free).

  4. 4. Generate a draft with `create_content`

    Give it a brief. **Async, billed per shipped draft on completion (50¢)**. The writer generates candidates, ranks by stylometric fit, and gates on a two-family on-voice panel + anti-slop + near-copy + factuality. Requires an approved writing profile first. Returns a `job_id` — poll `get_content_jobs` for the draft, a checkable scorecard, and a `decision` (`auto_ship` / `needs_review` / `needs_profile_rebuild`).

  5. 5. Poll async jobs with `get_content_jobs`

    Both `build_writing_profile` and `create_content` return a `job_id` immediately and run in the background. Poll `get_content_jobs` by id for `status` (pending / complete / failed), a `timed_out` flag, and the result. `get_content_jobs` is **free** — poll freely; you're only billed when the underlying build or draft completes.

  6. 6. Act on the decision

    Read the scorecard and `decision`. `auto_ship` — the draft cleared every gate; present it and its scores. `needs_review` — surface the specific gate(s) it's borderline on so the user can decide. `needs_profile_rebuild` — the profile no longer fits (voice drift or too thin a corpus); add more approved samples and rebuild before generating again. Never present a draft as 'on-brand' without its scorecard.

6. Tool Reference

7 tools, rendered live from the Gentic MCP manifest. Parameter tables come directly from each tool's JSON Schema.

add_content_sample

Free

Add a piece of the brand's existing writing to the content corpus (used to build the writing profile). Give it as `text` (paste) or a `url` to fetch — one of the two. For a URL, the page is fetched and the article text is extracted (boilerplate stripped); review the returned preview, then call approve_content_sample to make it eligible for profiling. Pasted text is stored as-is (still needs approval). Specify the content_type (blog, email, newsletter, ...). Free.

ParameterTypeDescription
textstring

Paste the brand's writing directly. Provide this OR url, not both.

urlstring

A URL to fetch + extract the article text from. Provide this OR text.

content_type
required
string

The sample's type: blog | newsletter | instagram_caption | tiktok_caption | youtube_description | youtube_title | x_post | linkedin_post | email | ad_copy | product_description | other.

titlestring

Optional title of the piece.

authorstring

Optional author.

channelstring

Optional distribution channel.

audiencestring

Optional audience the piece was written for.

purposestring

Optional intent / funnel stage.

published_atstring

Optional original publish date (ISO).

approveboolean

Approve the extraction immediately (skip the review step). Default false — the sample is captured but not eligible until approved.

approve_content_sample

Free

Approve a captured content sample's extraction (from add_content_sample) so it becomes eligible to build a writing profile. Pass the sample_id add_content_sample returned. Free.

ParameterTypeDescription
sample_id
required
string

The sample_id returned by add_content_sample.

build_writing_profile

200¢ / result

Build (or rebuild) the brand's writing profile for one voice + content type — async. Runs anti-slop-first: filters the corpus to the slop-free subset, then computes the stylometric fingerprint + brand lexicon + on-voice calibration from that subset. Returns a job_id immediately; poll get_content_jobs, then read get_writing_profile. Requires approved brand content samples (add_content_sample) of that content_type first. Billed per build on completion.

ParameterTypeDescription
voice
required
string

The scoping label for this profile (e.g. the brand/voice name). Stamped on every corpus doc — one profile = one voice.

content_type
required
string

The single content type to profile (e.g. 'blog', 'email'). Only approved samples of this type feed the build.

profile_keystring

Which profile lineage to (re)build (default 'default').

min_docsinteger

Minimum clean docs before the profile is trusted (default 3). Below this after the anti-slop gate → a loud unfiltered-fallback warning; below it even unfiltered → the build fails.

1 – 9007199254740991

df_floor_fracnumber

Document-frequency floor for the brand lexicon (default 0.2 = a word must appear in ≥20% of clean docs).

0 – 1

create_content

50¢ / result

Generate an on-brand draft from a brief, scored against the brand's writing profile — async. The writer generates candidates, ranks by stylometric fit, and gates on a two-family on-voice panel + anti-slop + near-copy + factuality. Returns a job_id; poll get_content_jobs for the draft + a checkable scorecard + a decision (auto_ship / needs_review / needs_profile_rebuild). Requires an approved writing profile (build_writing_profile) first. Billed per shipped draft.

ParameterTypeDescription
brief
required
string

What to write — the topic, angle, key points, audience, CTA. The more specific, the better the draft.

profile_keystring

Which writing profile to write against (default 'default'). Uses the current-approved version.

profile_versioninteger

Pin a specific profile version instead of the current-approved one.

1 – 9007199254740991

source_factsstring[]

Approved facts/claims the draft may use — the factuality gate checks the draft's claims against these.

get_content_jobs

Free

Poll a Content job by id (profile build or content generation). Returns status (pending/complete/failed), timed_out, and — when complete — the result: for a profile build, the profile_version_id; for content generation, draft_ref + decision (auto_ship | needs_review) + scorecard. Use this after build_writing_profile / create_content returns a job_id. Free.

ParameterTypeDescription
job_id
required
string

The job id returned by build_writing_profile or create_content.

get_writing_profile

Free

Get the brand's built writing profile (the objective scorer: stylometric fingerprint band + brand lexicon + on-voice judge threshold + anti-slop clean-subset provenance). By default returns the current APPROVED profile, or the latest draft if none is approved yet. Pass `version` or `id` to fetch a specific version, or `list=true` to list all versions. Free.

ParameterTypeDescription
profile_keystring

Which profile lineage (default 'default'). Most orgs have one.

versioninteger

Fetch a specific built version. Omit for the current-approved (or latest draft).

1 – 9007199254740991

idstring

Fetch a specific version by its id (what generation pins). Overrides `version`.

listboolean

List all versions (id/version/status/model, no heavy JSON) instead of returning one profile.

list_content_samples

Free

List the brand content samples in the corpus (from add_content_sample) — id, content_type, title, source, word_count, and whether each is eligible (approved) for profiling. Use it to find pending samples to approve. Free.

ParameterTypeDescription
content_typestring

Filter to one content type.

eligible_onlyboolean

Only samples already eligible for profiling (approved, non-generated).

limitinteger

Page size (default 50).

1 – 200

cursorstring

Pagination cursor (the last id of the previous page).

7. Pricing

Pricing is pulled live from the Gentic MCP manifest. All prices are per call and deducted from your Gentic credits.

ToolCost
add_content_sampleFree
approve_content_sampleFree
build_writing_profile200¢ / result
create_content50¢ / result
get_content_jobsFree
get_writing_profileFree
list_content_samplesFree

8. Notes

  • Two billable meters, everything else free: `build_writing_profile` is **200¢ per build** and `create_content` is **50¢ per shipped draft**, both charged on completion. `add_content_sample`, `approve_content_sample`, `list_content_samples`, `get_writing_profile`, and `get_content_jobs` are free.
  • Order matters: add samples → approve them → build a profile → generate content. `build_writing_profile` needs approved samples of that content type; `create_content` needs an approved profile.
  • Async: profile builds and draft generations return a `job_id` and run in the background. Poll `get_content_jobs`; you're billed only when the job completes.
  • One profile per voice + content type. Build separate profiles for, say, blog vs. email — each is scored on its own corpus.
  • The profile is the objective scorer: stylometric fingerprint band + brand lexicon + on-voice judge threshold, built from the anti-slop clean subset. That's what makes 'on-brand' checkable rather than a matter of taste.
  • `get_writing_profile` returns the current approved profile by default; pass `version`/`id` for a specific one, or `list=true` to see all versions.