Le moteur, pas seulement l'app.
Tout ce que fait le produit hébergé est accessible depuis votre code. Comment appeler Ascent ? Un client typé ou le service HTTP. Mon agent peut-il le piloter ? Un serveur MCP. Puis-je auto-héberger Ascent ? Une version sous licence, sur votre propre infrastructure avec vos clés fournisseurs.
Six façons de le livrer.
createSeoAgent()
Une seule façade sur les cœurs. Séparation fiable/non fiable — le navigateur ne détient jamais de clés.
Service HTTP
Un routeur Request→Response, licence Bearer, secrets côté serveur.
Serveur MCP
Serveur stdio sans dépendance, six outils SEO, pour Claude et d’autres clients MCP.
Compétence Claude
Compétence ascent-seo prête à l’emploi — MCP prioritaire, script en repli.
Widgets navigateur
Widgets purs build/mount — badge de rang, jauge de potentiel, carte de résultat.
Cockpit d’administration
Panneaux opérateur — propositions, mots-clés, classements — écritures via votre onAction.
Brief architecture & intégration
Le document développeur complet — profil d’exécution, les six surfaces, le cycle de vie des actions, un parcours d’adoption sûr et la checklist de production.
Analysez un site en une minute environ.
Installez le SDK, pointez-le vers un site avec l’adaptateur de contenu sitemap, puis lancez un audit. Aucune clé requise pour analyze().
# install (licensed — see the access note below)
npm i @ascent/seo-agent
import { createSeoAgent, sitemapAdapter } from '@ascent/seo-agent'
// the sitemap adapter is the no-code source of pages to audit
const { listIndexableEntities } = sitemapAdapter({ origin: 'https://acme.com' })
const seo = createSeoAgent(
{ site: { domain: 'acme.com' } },
{ listIndexableEntities },
)
const { issues } = await seo.analyze()
console.log(issues)
generate() (propositions de contenu IA) et run() (la boucle de tâches) utilisent les coutures fournisseur et stockage — voir la section SDK.
Le SDK — une façade, quatre profils.
createSeoAgent(config, deps) enveloppe les cœurs purs et renvoie { analyze, generate, run }. Une couche d’exécution détecte Node / Deno / edge / navigateur et sépare le fiable (serveur, détient les clés) du non fiable (navigateur, relaie les appels secrets au service). Une vérification de licence ES256 hors ligne réutilise vos droits.
import { createSeoAgent, sitemapAdapter, memoryStore } from '@ascent/seo-agent'
const seo = createSeoAgent(
{ site: { domain: 'acme.com' }, serviceUrl: 'https://your-service' },
{
listIndexableEntities: sitemapAdapter({ origin: 'https://acme.com' }).listIndexableEntities,
store: memoryStore(),
// callClaude, db, auth … wire the seams you need for generate()/run()
},
)
const { issues } = await seo.analyze()
const draft = await seo.generate() // human-approved content proposals
@ascent/seo-agent/license—verifyLicense(token, {now, publicKey}), offline.@ascent/seo-agent/config·/runtime— resolve config + the runtime/trust split.- Quatre profils
init: headless · api · frontend · admin.
npm i @ascent/seo-agent↓ Types .zip↓ Examples .zipUn gestionnaire. N routes. Secrets côté serveur.
Un unique routeur standard Web handleRequest(Request) → Response sur chaque enveloppe backend, avec authentification de licence unifiée Authorization: Bearer, CORS et réponses tolérantes aux pannes. C’est le point de terminaison vers lequel le SDK navigateur relaie — ainsi les clés restent sur le serveur.
import { createSeoService, defaultHandlers, toNodeHandler } from '@ascent/seo-agent/service'
const service = createSeoService({ handlers: defaultHandlers, secrets: process.env })
// Web-standard (edge / Deno / Bun):
export default (request) => service.handleRequest(request)
// or adapt to a Node http handler:
export const nodeHandler = toNodeHandler(service)
# call it with a license
curl -X POST https://your-service/analyze \
-H "authorization: Bearer $ASCENT_LICENSE" \
-H "content-type: application/json" \
-d '{"site":{"domain":"acme.com"}}'
Six outils SEO, via MCP.
Un serveur Model Context Protocol fait main, sans dépendance, via stdio, exposant analyze · generate · rankings · competitors · content · status. Fonctionne avec un service distant (SP1) ou un SDK local en processus.
// add to your MCP client config (e.g. Claude Desktop)
{
"mcpServers": {
"ascent-seo": {
"command": "npx",
"args": ["-y", "@ascent/seo-agent-mcp"],
"env": {
"ASCENT_SERVICE_URL": "https://your-service",
"ASCENT_LICENSE": "your-license-token"
}
}
}
}
Vous préférez l’importer? @ascent/seo-agent/mcp expose runServer, defineTools et resolveBackend.
Une compétence Claude prête à l’emploi.
La compétence ascent-seo permet à Claude d’exécuter des tâches SEO pour vous. Elle privilégie le serveur MCP lorsqu’il est connecté et se rabat sur un script CLI sans dépendance sinon — elle fonctionne donc que MCP soit branché ou non. Une référence d’honnêteté garde les résultats mesurés et projetés clairement distincts dans ce que Claude rapporte.
- Livrée comme
skill/ascent-seo/—SKILL.md+ référence d’honnêteté + CLI de repli. - MCP prioritaire ; le chemin script ne requiert que
ASCENT_SERVICE_URL+ASCENT_LICENSE. - Se marie naturellement avec le serveur MCP ci-dessus.
Widgets navigateur — build pur, montage léger.
Widgets navigateur sans dépendance, protégés contre le XSS : un injecteur de méta, un badge de rang (mesuré), une jauge de potentiel (projeté) et une carte de résultat honnête. Chacun est un pur buildX(data) → html plus un léger mountX(el, data), avec un theme.css de base.
import { mountRankBadge } from '@ascent/seo-agent/widgets'
import '@ascent/seo-agent/widgets/theme.css'
mountRankBadge(document.querySelector('#rank'), {
keyword: 'best crm',
position: 5, // measured on Google — not a projection
})
Un ascentClient navigateur dialogue avec votre service SP1 ; seul le jeton est envoyé, jamais les secrets.
Un cockpit opérateur que vous contrôlez.
Six panneaux exploitables — propositions, mots-clés, classements, concurrents, autonomie, statut — bâtis sur un petit cadre de panneaux. Les panneaux lisent via l’ascentClient et écrivent via un rappel onAction que vous branchez, donc aucun point d’écriture caché ne fait semblant d’exister.
import { mountProposals } from '@ascent/seo-agent/admin'
mountProposals(document.querySelector('#proposals'), {
client, // reads via SP1
onAction: (action) => approve(action) // you own the write path,
})
Deux façons de payer les opérations payantes.
Les opérations payantes (SERP + IA) ont un coût. Leur facturation dépend de l’endroit où tourne le moteur — sur votre infrastructure, ou sur l’API hébergée d’Ascent.
Auto-hébergé / sous licence → vos clés, sans crédits Ascent
Exécutez le moteur sur votre propre infrastructure avec vos clés Serper/Anthropic. Vous payez ces fournisseurs directement — les crédits Ascent ne s’appliquent pas et il n’y a rien à recharger. Votre coût = votre facture fournisseur + la licence annuelle. Générez une clé via un bouton 🔒 Generate license.
API / Service hébergé → crédits Ascent
Appelez le Service hébergé d’Ascent (Authorization: Bearer). Ascent exécute les opérations avec ses clés et les facture en crédits Ascent — le même portefeuille que l’app. Chaque exécution débite des crédits (remboursés en cas d’échec fournisseur) ; un portefeuille vide renvoie 402 insufficient_credits.
// check your balance (Bearer = your session token)
POST /rest/v1/rpc/credit_balance
{ "p_account": "<account_id>" } // → { total, planRemaining, topupBalance, resetsAt }
// top up: buy a credit pack (redirects to the hosted card page)
POST /api/payments/mips/create-payment
{ "kind": "credit_pack", "packId": "pack_5k", "accountId": "<account_id>" }
Vos propres clés (BYOK) : connectez vos clés Serper/Claude dans les paramètres du compte et les opérations hébergées s’exécutent sur vos clés à quasi zéro crédit — idéal pour les agences et les gros volumes.
Pendant une bêta ouverte, l’opérateur peut suspendre la facturation — les appels hébergés sont alors gratuits (l’usage est quand même enregistré).
Récupérez les composants gratuits.
Les éléments ouverts sont à télécharger et à utiliser dès maintenant. Le moteur sous licence — cœur du SDK, service/API, serveur MCP, cockpit d’administration — est disponible sur demande.
🔒 Sous licence · cœur du SDK · service/API · MCP · admin
Le moteur lui-même est un produit commercial sous licence — auto-hébergé ou en marque blanche. Ce n’est pas un téléchargement public — demandez un accès développeur et nous vous configurerons.