accueil / serveurs / Recherche & Web / ai.betterpost/server
ai.betterpost/server
serveur MCP (Model Context Protocol) · betterpost 0.1.0
Aucun comportement malveillant détecté au test comportemental.
Est-ce que ai.betterpost/server est sûr ?
Au dernier audit MCP Hub, le serveur MCP « ai.betterpost/server » est classé « Vérifié ». Aucun comportement malveillant détecté au test comportemental. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 23 outils
- betterpost_add_source≈ 825 tokens
Adds a source to a project and fetches it immediately (bounded by a few seconds), returning `storiesAdded` so the next generate_content can use it; if it is still fetching it returns `fetched:false` with a note. Doubles as manual source import: paste any URL (RSS/Atom feed, article, or a page, profile, or post on a supported platform) and leave `type` as autodetect, or create a recurring keyword search by setting `value` to the search terms and `type` to a search kind (see `type`).
Paramètres, retour & exemple (4)
Paramètresname· string · optionneltype· string · optionnel · autodetect | web-search | reddit-search | youtube-search | x | bluesky
Source kind (one of the enum values; defaults to 'autodetect'). 'autodetect' infers the kind from `value` (a URL): RSS/Atom feeds, web pages, news, Reddit subreddits, X and Bluesky posts/users, LinkedIn company pages, Instagram profiles, YouTube videos, and Hacker News items — leave it as 'autodetect' for any URL. For a recurring keyword search that re-runs over time, set `value` to the search terms and pick a search kind: 'web-search', 'reddit-search', 'youtube-search', 'x' (X/Twitter search), or 'bluesky' (Bluesky search).value· string · requisprojectId· string · requis
Exemple d'appel{"name": "betterpost_add_source", "arguments": {"value": "texte", "projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"note": "texte", "source": {}, "fetched": true, "storiesAdded": 1}} - betterpost_add_story≈ 294 tokens
Manually imports a story you read about from its URL (pinned relevance, flagged is_manual) so generation can draw on it.
Paramètres, retour & exemple (4)
Paramètresurl· string · requistitle· string · optionnelsummary· string · optionnelprojectId· string · requis
Exemple d'appel{"name": "betterpost_add_story", "arguments": {"url": "texte", "projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"storyId": "texte"}} - betterpost_create_project≈ 420 tokens
Create a content project. Slow, one-shot: infers config (criteria, industry, tone), discovers sources, and gathers/ranks an initial set of timely stories. Best called after the inferred audience, description, and tone have been confirmed with the user, since the config shapes everything downstream.
Paramètres, retour & exemple (4)
Paramètrestone· string · optionneltitle· string · requisaudience· string · requisdescription· string · optionnel
Exemple d'appel{"name": "betterpost_create_project", "arguments": {"title": "texte", "audience": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"tone": "texte", "reason": "texte", "warming": true, "criteria": [], "industry": "texte", "projectId": "texte", "hasXSource": true, "storiesGot": 1, "storiesGoal": 1}} - betterpost_delete_content≈ 250 tokens
Delete a piece of content and its hosted images.
Paramètres, retour & exemple (1)
ParamètrescontentId· string · requis
Exemple d'appel{"name": "betterpost_delete_content", "arguments": {"contentId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"deleted": "texte"}} - betterpost_delete_project≈ 264 tokens
Permanently deletes a project and everything in it — its sources, stories, and content. Cannot be undone.
Paramètres, retour & exemple (1)
ParamètresprojectId· string · requis
Exemple d'appel{"name": "betterpost_delete_project", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"deleted": "texte"}} - betterpost_derive_content≈ 561 tokens
Transform an existing piece into another format (e.g. newsletter → tweet). No fetching; reuses the source stories and topic.
Paramètres, retour & exemple (3)
Paramètrestype· string · requis · blog | newsletter | linkedin | x | blueskytieIn· string · optionnelfromContentId· string · requis
Exemple d'appel{"name": "betterpost_derive_content", "arguments": {"type": "blog", "fromContentId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"type": "blog", "topic": "texte", "content": {}, "summary": "texte", "contentId": "texte", "publicUrl": "texte", "storyCount": 1, "imagesHosted": 1, "creditsCharged": 1}} - betterpost_expand_coverage≈ 542 tokens
Broadens a project's coverage: expands the relevance criteria (when needed), finds more sources across news, the web, and the relevant social platforms, and fetches them inline. Applies on a `topic_unavailable`, `no_stories`, or low-coverage signal. May return `warming: true` with `retryAfterMs` (~60s), meaning the newly gathered stories are still landing. An out-of-scope `focus` requires `confirmedByUser: true`; without it, it returns a `confirmation_required` error. No credits are charged.
Paramètres, retour & exemple (4)
Paramètresfocus· string · optionnel
The topic to get more on (e.g. "League of Legends"). Omit to broaden the whole project.projectId· string · requisaddAsCriteria· boolean · optionnel
Also append an in-scope `focus` as a standing relevance criterion (out-of-scope, confirmed foci are added automatically).confirmedByUser· boolean · optionnel
Set true once the user has agreed to widen the project to an out-of-scope `focus`.
Exemple d'appel{"name": "betterpost_expand_coverage", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"warming": true, "retryAfterMs": 1, "sourcesAdded": [], "storiesAdded": 1, "criteriaAdded": []}} - betterpost_generate_content≈ 841 tokens
Generate a new piece of content for a project from its timely, relevant stories. Fast in steady state. Charges credits on success only. If you pass a `topic` the project has no stories about, this returns a `topic_unavailable` error (no charge) carrying an `inScope` flag and next steps — it never silently writes an off-topic piece.
Paramètres, retour & exemple (6)
Paramètrestype· string · requis · blog | newsletter | linkedin | x | bluesky
Output format. 'x' and 'bluesky' are generated as a single post or, more often, a short numbered thread of connected posts (multiple tweets) when there is enough to say — this is the default for those channels. 'blog', 'newsletter', and 'linkedin' are one piece.reuse· boolean · optionnel
Reuse the most recent topic.tieIn· string · optionnel
A product/service to weave in.topic· string · optionnel
Steer the piece to a specific topic. Generation only writes from stories actually about it. If none exist yet, it returns topic_unavailable (no charge) with an inScope flag: inScope:true means the topic fits the project and betterpost_expand_coverage can gather it, while inScope:false means it is outside the project scope so expanding to it requires the user's confirmation.projectId· string · requiswordLimit· integer · optionnel
Exemple d'appel{"name": "betterpost_generate_content", "arguments": {"type": "blog", "projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"type": "blog", "topic": "texte", "content": {}, "summary": "texte", "contentId": "texte", "publicUrl": "texte", "storyCount": 1, "imagesHosted": 1, "creditsCharged": 1}} - betterpost_get_content≈ 691 tokens
Fetch one piece of content in full.
Paramètres, retour & exemple (1)
ParamètrescontentId· string · requis
Exemple d'appel{"name": "betterpost_get_content", "arguments": {"contentId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"id": "texte", "type": "blog", "content": {}, "summary": "texte", "topicId": "texte", "createdAt": "texte", "projectId": "texte", "publicUrl": "texte", "wordLimit": "texte", "storyCount": 1, "derivedFromContentId": "texte"}} - betterpost_get_project≈ 572 tokens
Returns one project with its relevance `criteria` (each with an id, so a criterion can be targeted for removal via betterpost_update_project).
Paramètres, retour & exemple (1)
ParamètresprojectId· string · requis
Exemple d'appel{"name": "betterpost_get_project", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"id": "texte", "tone": "texte", "title": "texte", "status": "initializing", "audience": "texte", "criteria": [], "industry": "texte", "timezone": "texte", "createdAt": "texte", "updatedAt": "texte", "hasXSource": true, "description": "texte"}} - betterpost_get_settings≈ 380 tokens
Returns a project's per-content-type settings (wordLimit and additionalInstructions for each channel).
Paramètres, retour & exemple (1)
ParamètresprojectId· string · requis
Exemple d'appel{"name": "betterpost_get_settings", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"contentTypeSettings": []}} - betterpost_get_usage≈ 184 tokens
Your credit balance, freeze state, and recent spend.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "betterpost_get_usage", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"kind": "texte", "frozen": true, "creditBalance": 1, "recentSpendUsd": 1}} - betterpost_hide_story≈ 263 tokens
Hides a story so generation ignores it. Reversible with unhide_story.
Paramètres, retour & exemple (1)
ParamètresstoryId· string · requis
Exemple d'appel{"name": "betterpost_hide_story", "arguments": {"storyId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"hidden": true, "storyId": "texte"}} - betterpost_humanize≈ 477 tokens
Rewrite existing text into BetterPost's readable, human voice. Preserves the meaning, facts, links, and format; returns the rewritten text plus short notes on what changed. Pass `projectId` to write in that project's tone and instructions, `type` to apply a channel's style, or `tone` to set the voice directly.
Paramètres, retour & exemple (4)
Paramètrestext· string · requis
The text to humanize (max 30,000 characters).tone· string · optionnel
Tone override; wins over the project tone.type· string · optionnel · blog | newsletter | linkedin | x | bluesky
Apply this channel's style rules to the rewrite.projectId· string · optionnel
Use this project's tone and writing instructions.
Exemple d'appel{"name": "betterpost_humanize", "arguments": {"text": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"text": "texte", "changes": [], "inputWords": 1, "creditsCharged": 1}} - betterpost_list_content≈ 350 tokens
List a project's content (summaries + shareable `publicUrl` links).
Paramètres, retour & exemple (1)
ParamètresprojectId· string · requis
Exemple d'appel{"name": "betterpost_list_content", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"content": []}} - betterpost_list_projects≈ 533 tokens
Returns your projects, each with its relevance `criteria` (with ids) that define what counts as on-topic.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "betterpost_list_projects", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"projects": []}} - betterpost_list_sources≈ 798 tokens
Returns one slimmed page of a project's sources plus project-wide `total` and `counts` (ok/failing/disabled/pending, and byType). Page with `limit` (default 50) and `offset`, following the returned `nextOffset` until it is null.
Paramètres, retour & exemple (3)
Paramètreslimit· integer · optionnel
Max sources to return (default 50).offset· integer · optionnel
Number of sources to skip; use the returned nextOffset to page.projectId· string · requis
Exemple d'appel{"name": "betterpost_list_sources", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"limit": 1, "total": 1, "counts": {}, "offset": 1, "sources": [], "returned": 1, "nextOffset": "texte"}} - betterpost_list_stories≈ 774 tokens
Returns a project's gathered stories, each with `title`, `url`, `summary`, `relevancy`, `publicationDate`, and `isManual`/`isHidden` flags. Pass includeHidden to include hidden ones.
Paramètres, retour & exemple (2)
ParamètresprojectId· string · requisincludeHidden· boolean · optionnel
Exemple d'appel{"name": "betterpost_list_stories", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"stories": []}} - betterpost_remove_source≈ 262 tokens
Removes a source from a project. Its already-gathered stories stay; the source is no longer fetched.
Paramètres, retour & exemple (1)
ParamètressourceId· string · requis
Exemple d'appel{"name": "betterpost_remove_source", "arguments": {"sourceId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"removed": "texte"}} - betterpost_suggest_topics≈ 430 tokens
Clusters a project's current stories into a few candidate angles — each with a label, how many stories back it, and example headlines — and warms the project (gathers and ranks fresh stories) in the process. Returns topics you can offer the user before generate_content.
Paramètres, retour & exemple (3)
Paramètrestype· string · optionnel · blog | newsletter | linkedin | x | blueskycount· integer · optionnelprojectId· string · requis
Exemple d'appel{"name": "betterpost_suggest_topics", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"topics": [], "projectId": "texte"}} - betterpost_unhide_story≈ 263 tokens
Unhides a previously hidden story so generation can use it again.
Paramètres, retour & exemple (1)
ParamètresstoryId· string · requis
Exemple d'appel{"name": "betterpost_unhide_story", "arguments": {"storyId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"hidden": true, "storyId": "texte"}} - betterpost_update_project≈ 1061 tokens
Updates a project's title, audience, description, tone, freshness window, timezone, or relevance criteria, and returns the updated project with its criteria. Changing title/audience/description re-derives the relevance criteria (replace-all), which broadens or narrows what counts as on-topic. To edit criteria incrementally instead, pass `patch.addCriteria` (texts to append) and/or `patch.removeCriteria` (criterion ids from get_project/list_projects). Dates default to US Eastern unless a `timezone` (an IANA name like "America/New_York") is set.
Paramètres, retour & exemple (2)
Paramètrespatch· object · optionnel
Partial update: EVERY field is optional — include only the fields you want to change and omit the rest (an omitted field is left untouched; there are no required patch fields). Passing an empty object or omitting `patch` entirely is a no-op. Fields: title, audience, description, tone, maxStoryAgeDays, additionalInstructions, timezone, addCriteria, removeCriteria.projectId· string · requis
Exemple d'appel{"name": "betterpost_update_project", "arguments": {"projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"id": "texte", "tone": "texte", "title": "texte", "status": "initializing", "audience": "texte", "criteria": [], "industry": "texte", "timezone": "texte", "createdAt": "texte", "updatedAt": "texte", "hasXSource": true, "description": "texte"}} - betterpost_update_settings≈ 401 tokens
Patches one content type's wordLimit and/or additionalInstructions (free-form writing guidance for that type; pass an empty string to clear it). Project-wide preferences (title/audience/tone, project-wide additionalInstructions) live on betterpost_update_project.
Paramètres, retour & exemple (4)
Paramètrestype· string · requis · blog | newsletter | linkedin | x | blueskyprojectId· string · requiswordLimit· integer · optionneladditionalInstructions· ? · optionnel
Exemple d'appel{"name": "betterpost_update_settings", "arguments": {"type": "blog", "projectId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"updated": {}}}
Badge pour votre README
Ce serveur a passé le pentest comportemental. Le badge porte son nom et renvoie à cette fiche — la preuve, c'est la fiche (verdict live qu'on contrôle), pas l'image.
[](https://dokore.fr/serveur/ai.betterpost--server)
<a href="https://dokore.fr/serveur/ai.betterpost--server"><img src="https://dokore.fr/badge/ai.betterpost--server.svg" alt="Vérifié par MCP Hub" height="20"></a>
Réévalué en continu : si le comportement change, le verdict tombe et le badge disparaît. Un badge qui ne pointe pas vers une fiche dokore.fr ne prouve rien. Comment ça marche
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».