Skip to main content

Rayonne MCP

Serveur MCP (stdio) exposant le workspace Rayonne — contenus, soumissions, métriques AARRR — à tout agent compatible MCP (Claude Code, Claude Desktop…), via l'API publique v1 en lecture et écriture (docs/API.md du repo).

Prérequis

Une clé API workspace (rk_…) : Rayonne → Réglages → Clés API (plan Business, entitlement api_access).

Codex

L’adaptateur rayonne-codex reprend les outils du serveur PyPI qu’il épingle — rayonne-mcp==0.7.0, la version publiée (82 outils), jusqu’à la publication de 0.8.0 (étape 2 ci-dessous) — et neuf parcours du plugin Claude, avec configuration sécurisée macOS. Construction : python3 mcp/build/build_codex_plugin.py depuis la racine du dépôt.

Claude Code

claude mcp add rayonne \
  --env RAYONNE_API_KEY=rk_xxxxxxxx \
  --env RAYONNE_API_URL=https://rayonne.sponge-theory.dev \
  -- uv run --project /chemin/vers/rayonne/mcp rayonne-mcp

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "rayonne": {
      "command": "uv",
      "args": ["run", "--project", "/chemin/vers/rayonne/mcp", "rayonne-mcp"],
      "env": {
        "RAYONNE_API_KEY": "rk_xxxxxxxx",
        "RAYONNE_API_URL": "https://rayonne.sponge-theory.dev"
      }
    }
  }
}

Le serveur démarre sans clé (non fatal) : chaque outil renvoie alors un message d'installation clair au lieu d'un crash.

Outils

118 outils, un par verbe de l'API publique, regroupés par module (voir CLAUDE.md du repo pour la carte fonctionnelle M1-M9).

Déposer un fichier (0.6.0) : rayonne_upload_product_asset et rayonne_upload_submission_asset prennent un chemin de fichier local — le serveur MCP tourne sur la machine de l'utilisateur et lit les octets lui-même. Un chemin fautif est refusé avant tout appel réseau.

Aucun dépôt d'avatar, par construction : enregistrer un VISAGE engage le consentement d'une personne réelle, au nom de l'utilisateur connecté ; une clé rk_ n'a pas d'utilisateur. Il n'y a donc ni outil ni route publique de dépôt d'avatar — rayonne_generate_avatar compose un portrait de synthèse, et déposer une vraie photo reste un acte humain, dans l'interface.

Listes : un outil qui rend une liste (rayonne_list_tasks, rayonne_list_experiments…) la rend en un bloc de contenu par élément — c'est ainsi que le SDK MCP (FastMCP 1.x) sérialise un retour non typé. Une liste d'un seul élément a donc, au niveau du protocole, la forme d'un objet, et une liste vide n'a aucun bloc. Noté par le parcours E2E « surfaces », laissé tel quel : envelopper les listes changerait la sortie de chaque outil.

Cibler un autre espace (0.5.0) : tout outil ci-dessous, sauf rayonne_list_workspaces et rayonne_create_workspace, prend un workspace_id optionnel — passe l'id d'un espace rendu par rayonne_list_workspaces pour agir là-bas plutôt que dans l'espace d'origine de la clé. Omis, rien ne change par rapport à avant 0.5.0.

M1 Brief

Outil Rend
rayonne_analyze_product Analyse la page produit et en tire un brief frais (crawl + extraction).
rayonne_list_briefs Product briefs, newest first: what the crawler extracted from the product page (value prop, ICP, features, proof points, pricing).
rayonne_get_brief One brief in full, including everything the extractor understood.
rayonne_patch_brief Hand-correct what the extractor misread.
rayonne_list_facts The product-facts ledger every generated text is grounded on, with source, date, origin, status and whether each fact is usable.
rayonne_create_fact Add a fact the founder declares (metric, verbatim testimonial with its author, consented customer, integration, press, pricing, feature, link).
rayonne_update_fact Correct a fact, its consent or status; accept or dismiss what a re-crawl proposes.
rayonne_archive_fact Archive a fact: no generated text uses it any more.

M2 Stratégie

Outil Rend
rayonne_list_strategies All marketing strategies, newest version first.
rayonne_current_strategy The ACTIVE strategy: Bullseye channel scoring plus the 90-day plan the autopilot materialises into scheduled content.
rayonne_create_strategy Score the 20 Bullseye acquisition channels from the founder's reality (stage × segment priors, guardrails) and draft a 90-day plan.
rayonne_activate_strategy Make a strategy ACTIVE.
rayonne_delete_strategy Delete a strategy.
rayonne_founder_context The founder's reality the strategy starts from — stage, segment (guessed from the brief, to confirm), hours per week, audience, paid budget. Written with rayonne_update_workspace(founder_context=...).
rayonne_add_plan_action / rayonne_edit_plan_action / rayonne_remove_plan_action Edit the 90-day plan; an action keeps its key, nothing scheduled is ever duplicated.
rayonne_generate_plan_action « Générer cette action » — write one Rayonne-owned action now, on every plan, within the monthly quota.
rayonne_list_experiments / rayonne_add_experiment / rayonne_update_experiment / rayonne_delete_experiment At most three pre-registered experiments per plan — editable before they start, locked after.
rayonne_record_experiment_result Note the result of a manual experiment at its end date (a channel no attribution path reaches) — the founder's own count, never a guess.
rayonne_decide_experiment Keep, kill or extend an experiment at its end date, against Rayonne's recommendation and its evidence.

M3 Contenu

Outil Rend
rayonne_list_content Latest content pieces (max 100).
rayonne_get_content One content item WITH its generated text.
rayonne_generate_content Generate one piece for a venue.
rayonne_edit_content Edit a piece before it ships.
rayonne_approve_content Approve a piece for publication — the human-in-the-loop gate.
rayonne_reject_content Reject a piece.
rayonne_reset_content Re-run generation for an item.
rayonne_schedule_content Move a piece's publication time.
rayonne_repurpose_content Atomise one piece into others (1 → N), keeping its substance and claims but adopting each target venue's shape and length.
rayonne_localize_content Translate a piece into another locale, as a REVIEW-status sibling — a human verifies the translation before it ships.
rayonne_delete_content Delete a content item.

M3 Kit de vente et médias

Outil Rend
rayonne_content_media The resolved media selection for a post: public URL, dimensions, duration, and why a resource was dropped when it has disappeared.
rayonne_set_content_media Set the media selection BY HAND and LOCK the piece.
rayonne_recompute_content_media Replay the media selection from the venue's playbook, leaving the text untouched.
rayonne_brand_card Compose a brand card (a generated image carrying a punchline) and put it first in the media list.
rayonne_regenerate_text Rewrite the post on a DIFFERENT argument from its selling kit.
rayonne_preview_content What the post would look like published on a venue: text, any thread split, link placement, and media — without publishing anything.

M4 Soumission

Outil Rend
rayonne_list_platforms The platform catalogue with each venue's EXECUTION MODE.
rayonne_list_submissions Latest submissions (max 100): platform slug, mode (api/browser_local/ semi_auto), status, and external_url once published.
rayonne_get_submission One submission: status, platform, evidence, external URL.
rayonne_submission_kit The Mode C kit: a pre-filled deep link, the text blocks to paste and a checklist.
rayonne_create_submission Schedule an APPROVED piece for submission to a platform.
rayonne_confirm_submission Mode C — record that a manual submission was published.
rayonne_retry_submission Retry a failed submission, or a parked one where nothing went out (retryable).
rayonne_cancel_submission Cancel a pending or scheduled submission.
rayonne_schedule_submission Move a submission's dispatch time.
rayonne_delete_submission Delete a submission.
rayonne_upload_submission_asset Attach a screenshot of your own to a Mode C kit (a path on THIS machine; kind is the slot: cover, gallery, logo).
rayonne_generate_submission_assets Run the kit's visual pipeline: a screenshot of the product page plus AI variants for each slot.
rayonne_list_submission_assets The kit's visuals: signed URLs per slot, plus whether a generation is still running.
rayonne_delete_submission_asset Remove one visual from the kit, by file name. IRREVERSIBLE.

M5 Analytics

Outil Rend
rayonne_metrics_aarrr The AARRR snapshot over a sliding window of 1-90 days — one figure per metric (never a stage sum); GEO and the north star as levels.
rayonne_metrics_channels Which channel brings customers: clicks, signups (n), activated users, revenue and engagement per platform and per Bullseye channel, with the unattributed share and no winner below the minimum sample.
rayonne_list_tracking_links UTM tracking links and their click counts.
rayonne_create_tracking_link Create a trackable UTM link.
rayonne_list_reviews Weekly marketing reviews — an LLM reading the AARRR metrics and saying what to change.
rayonne_run_review Compose a review now instead of waiting for the weekly beat.

« À faire » — les gestes du fondateur

Rayonne organise l'engagement humain, il ne le fait jamais : ces outils rappellent et enregistrent, ils ne répondent à personne.

Outil Rend
rayonne_list_tasks The founder's to-do list — reply windows after each post (link, guidance, closing time), the weekly community participation, the monthly review request — filtered by status and kind.
rayonne_update_task Record the founder's gesture: done, skipped, or todo to reopen (409 task_closed once a window has closed).

Lancement (WS7)

Le plan organise, les kits préparent, le fondateur publie : aucun outil ne publie sur Reddit, Hacker News, Product Hunt ou Indie Hackers, ni n'écrit un Show HN.

Outil Rend
rayonne_launch_plan The active launch runbook (null when none): each dated step, its words, its gates and its task status.
rayonne_create_launch_plan Create the runbook from a launch day; under 14 days answers 422 launch_too_soon unless the user confirms.
rayonne_reschedule_launch Move the launch day: every step moves with it, Show HN never on Product Hunt's day.
rayonne_move_launch_step Move one step (422 show_hn_same_day, 422 date_in_past).
rayonne_delete_launch_plan Archive the active runbook; its open steps are skipped.
rayonne_launch_gates What the launch gates know — pass, fail or unknown (unknown is not a pass).
rayonne_answer_launch_gate Record the founder's answer to a gate; by a key, maker_present and community_history:* stay unknown.
rayonne_recheck_launch_gates Read the product page once more (a waitlist fails the public-usage gates).
rayonne_list_comparisons / rayonne_get_comparison The comparison matrices — each cell a value, its source URL and its date.
rayonne_create_comparison Start a matrix; the founder's column is pre-filled from the ledger, to confirm.
rayonne_update_comparison Replace a matrix; clears the confirmation.
rayonne_confirm_comparison The founder confirms every value on its date.
rayonne_check_comparison What blocks a page, without generating.
rayonne_generate_comparison Write a « X vs Y » or « alternative à Y » article from the matrix ONLY; always waits for the founder.
rayonne_delete_comparison Delete a matrix (a page already written keeps its frozen copy).

M9 Vidéo et storyboard

Outil Rend
rayonne_create_video Génère une vidéo courte à partir du brief courant.
rayonne_list_videos Video projects: status, current pipeline stage, degradations, and the rendered URL once finished.
rayonne_get_video One video project in full: storyboard, per-stage state, assets, selling-coverage score and render URL.
rayonne_list_video_venues Where a video can be published and in which format.
rayonne_regenerate_video Resume the pipeline from one stage instead of rebuilding everything.
rayonne_derive_video Derive another aspect ratio from a finished video (9x16, 16x9, 1x1) without regenerating its content.
rayonne_publish_video Schedule a finished video for publication.
rayonne_delete_video Delete a video project and its assets.
rayonne_preview_storyboard What an edit WOULD be worth, without saving anything.
rayonne_update_storyboard Save an edited storyboard.
rayonne_approve_storyboard Resume production after review.
rayonne_storyboard_options What a scene may contain: roles, shots per source, limits, and the ONLY pages a capture scene may film (the brief's allow-list).
rayonne_reopen_storyboard Reopen the review of a FINISHED video. Regenerates nothing.
rayonne_assist_storyboard Ask the model for ONE change to a scene (rewrite/shorten/variants/add_scene_for) and get a proposal plus its review. Calls a model.
rayonne_chat_storyboard Discuss the whole script in plain words; a proposed storyboard comes back with its diff when the request implies a change. Calls a model.
rayonne_storyboard_thumbnail The REAL thumbnail of a page a capture scene would film (viewport, scroll offset), within the brief's allow-list.
rayonne_update_video Choose who speaks in the video — or nobody. The only project field editable during review.
rayonne_music_presets The music catalogue outside any project: the styles and levels the workshop actually offers.

Avatars vidéo

Aucun dépôt de visage (voir plus haut).

Outil Rend
rayonne_list_avatars The workspace's avatar gallery: name, traits, whether it is enabled, and a preview URL.
rayonne_cartoon_avatar_options The closed vocabulary of a cartoon avatar (gender, skin tone, hair, facial hair, outfit).
rayonne_create_cartoon_avatar Add a cartoon avatar — a drawn character that sings clip videos. Free: drawn by code.
rayonne_generate_avatar Compose a synthetic portrait from traits and add it to the gallery. Calls an image model.
rayonne_update_avatar Rename an avatar, or take it out of circulation with enabled=False.
rayonne_cutout_avatar Redo the avatar's cut-out (transparent background) IN PLACE. Best-effort.

Galerie produit

Outil Rend
rayonne_list_product_assets The product-screen gallery: real screens of the product (behind the login, or a native app) that a video may show, each with a caption.
rayonne_upload_product_asset Deposit a real screen or clip of the product into the gallery (a path on THIS machine).
rayonne_update_product_asset Correct a screen's caption — never to empty it.
rayonne_suggest_asset_caption Ask a vision model what a screen shows; saved only if the screen has no caption yet. Calls a model.
rayonne_delete_product_asset Remove a screen or clip from the gallery. IRREVERSIBLE.

Audit

Outil Rend
rayonne_list_audits Les audits marketing passés de la page produit (verdict, note, axes).
rayonne_marketing_audit Audite le MESSAGE de la page produit et rend un verdict actionnable.

Espaces de l'organisation

Outil Rend
rayonne_list_workspaces The workspaces this key can act on, home first.
rayonne_create_workspace Create a workspace in this key's organisation.
rayonne_delete_workspace Delete a workspace and everything in it. IRREVERSIBLE.
rayonne_onboard_workspace Termine l’initialisation, conserve brief et stratégie ; clé admin requise.
rayonne_update_workspace Change a workspace's settings.

Workspace

Outil Rend
rayonne_overview Workspace summary: name, product URL, autopilot state, and content / submission counts by status.
rayonne_workspace The targeted workspace's current settings for this key: name, product URL, locale, pause, autopilot, real autopublishing, AI illustrations, video music default.
rayonne_set_ai_illustrations Turn AI illustrations on or off for the workspace.

Changelog

0.8.0

L'audit produit (v1.33 → v1.41) arrive dans Claude : 36 outils ajoutés depuis 0.7.0, 118 au total, un par verbe de l'API publique. Nécessite le backend v1.41 ou plus récent.

  • Faits du produit (WS1a) — rayonne_list_facts, rayonne_create_fact, rayonne_update_fact, rayonne_archive_fact : le registre de preuves sur lequel chaque texte s'ancre.
  • Stratégie (WS4) — rayonne_founder_context ; le plan modifiable : rayonne_add_plan_action, rayonne_edit_plan_action, rayonne_remove_plan_action, rayonne_generate_plan_action ; les expériences pré-enregistrées : rayonne_list_experiments, rayonne_add_experiment, rayonne_update_experiment, rayonne_delete_experiment, rayonne_record_experiment_result, rayonne_decide_experiment.
  • « À faire » (WS3) — rayonne_list_tasks, rayonne_update_task : les gestes du fondateur (fenêtres de réponse, participation hebdomadaire, demande d'avis, étapes de lancement), rappelés, jamais faits à sa place.
  • Mesure (WS5) — rayonne_metrics_channels : quel canal amène des clients, avec n et sans gagnant sous l'échantillon minimal.
  • Lancement (WS7) — rayonne_launch_plan, rayonne_create_launch_plan, rayonne_reschedule_launch, rayonne_move_launch_step, rayonne_delete_launch_plan, rayonne_launch_gates, rayonne_answer_launch_gate, rayonne_recheck_launch_gates ; les pages de comparaison sourcées : rayonne_list_comparisons, rayonne_get_comparison, rayonne_create_comparison, rayonne_update_comparison, rayonne_confirm_comparison, rayonne_check_comparison, rayonne_generate_comparison, rayonne_delete_comparison.
  • Avatars cartoon — rayonne_cartoon_avatar_options, rayonne_create_cartoon_avatar (le personnage qui chante un clip).
  • Outils changés — rayonne_update_workspace prend founder_context, activation_event, north_star_metric, venue_cadence, paid_partnership, bluesky_account et engagement_emails ; rayonne_edit_content prend paid_partnership et dit la forme d'un fil ; rayonne_approve_content est refusé (409) sur LinkedIn, une page LinkedIn, Hashnode (founder_approval_required) et une page de comparaison (comparison_human_review_required) : une personne valide dans l'application ; rayonne_retry_submission nomme ses refus 409 ; rayonne_create_submission, rayonne_retry_submission, rayonne_schedule_submission et rayonne_publish_video exigent un contenu validé (409 content_not_approved) — une page de comparaison, validée par une personne dans l'application ; un contenu validé que rayonne_edit_content retouche repart en relecture ; rayonne_publish_video saute LinkedIn ; rayonne_list_platforms porte les règles écrites de chaque venue (tos) et sa cadence ; rayonne_metrics_aarrr rend une valeur par métrique et le GEO en taux.
  • Refus entiers — un refus de l'API rend {"error": "request_failed", "status", "detail", "message"} : detail est le refus structuré du serveur (son code, hint_fr / hint_en, les problems d'un comparatif), là où message coupait à 300 caractères.

0.7.0

rayonne_onboard_workspace termine l’initialisation d’un espace via une clé administratrice, sans régénération ni activation. rayonne_patch_brief conserve les champs absents, fusionne les objets imbriqués, remplace les tableaux et enregistre les valeurs nulles. Nécessite le backend corrigé.

0.6.0

Le dépôt, l'atelier vidéo et les pièces jointes d'un kit sortent du navigateur. Dix-huit outils s'ajoutent : la galerie produit devient inscriptible (rayonne_upload_product_asset — un CHEMIN de fichier local, lu par le serveur sur la machine de l'utilisateur —, rayonne_update_product_asset, rayonne_suggest_asset_caption, rayonne_delete_product_asset) ; l'atelier vidéo s'ouvre en entier (avatars rayonne_list_avatars / rayonne_generate_avatar / rayonne_update_avatar / rayonne_cutout_avatar, relecture rouvrable rayonne_reopen_storyboard, aide IA rayonne_assist_storyboard et rayonne_chat_storyboard, vignette réelle rayonne_storyboard_thumbnail, choix de l'avatar rayonne_update_video, catalogue rayonne_music_presets) ; et un kit Mode C accepte enfin des visuels déposés à la main (rayonne_upload_submission_asset, rayonne_generate_submission_assets, rayonne_list_submission_assets, rayonne_delete_submission_asset). 81 outils au total.

Une absence est délibérée : il n'y a pas d'outil de dépôt d'avatar, et pas de route publique derrière. Déposer un visage engage le consentement d'une personne réelle au nom de l'utilisateur connecté ; une clé rk_ n'a pas d'utilisateur, donc un agent ne peut pas l'attester à sa place. Le portrait de synthèse (rayonne_generate_avatar) est la voie ouverte ici ; une vraie photo se dépose dans l'interface, par un humain.

0.5.0

Une clé peut désormais piloter TOUTE l'organisation, pas seulement son espace d'origine : rayonne_list_workspaces énumère ce qu'elle peut atteindre (l'origine marquée is_home), rayonne_create_workspace et rayonne_delete_workspace ouvrent et ferment des espaces (clé avec le cran d'administration), et rayonne_update_workspace règle l'espace visé sur l'objet complet des réglages. Les 59 outils existants gagnent un workspace_id optionnel pour agir sur un autre espace que celui de la clé — omis, comportement inchangé. Rupture : le format rendu par rayonne_workspace (et par rayonne_update_workspace) n'est plus le format étroit d'avant — autopilot_enabled devient autopilot, et locale, paused, autopublish_live, video_music apparaissent. 63 outils au total.

0.4.0

Kit de vente et médias d'un post pilotables depuis Claude : inspecter la sélection média résolue, la fixer à la main ou la recalculer depuis le playbook, composer une carte de marque, changer d'argument de vente, et prévisualiser texte + médias par venue avant publication. Huit outils ajoutés (rayonne_content_media, rayonne_set_content_media, rayonne_recompute_content_media, rayonne_brand_card, rayonne_regenerate_text, rayonne_preview_content, rayonne_workspace, rayonne_set_ai_illustrations) — 59 outils au total.

Tests

cd mcp && uv run --extra dev pytest -q

Publication marketplace

À faire via le flux commun Sponge Theory (même patron qu'audigeo-mcp : stdio + PyPI, vendored dans ezeeFlop/claude-plugins) — voir l'agent mcp-plugin-publisher. Pour une version (tests/test_release_version.py garde les déclarations d'accord), dans cet ordre :

  1. ./build/publish_pypi.sh — construit la roue et le sdist (build_wheel.sh) et publie rayonne-mcp==<version> sur PyPI ;
  2. l'adaptateur Codex, qui lance uv run --locked, garde la version publiée jusque-là ; il passe à la nouvelle juste après l'envoi PyPI : rayonne-codex/pyproject.toml (rayonne-mcp==<version>, sa propre version), .codex-plugin/plugin.json, le compte d'outils de scripts/check_connection.py, de son README et du skill rayonne-setup, puis cd rayonne-codex && uv lock (le verrou ne se régénère qu'une fois le paquet sur PyPI) et tests/test_release_version.py (PUBLISHED, PUBLISHED_TOOLS) ;
  3. ./build/build_plugin.sh, ./build/build_mcpb.sh et python3 build/build_codex_plugin.py — les trois paquets dans dist/. L'image API copie mcp/dist/ (docker/Dockerfile.api) et sert le .mcpb et le plugin depuis Réglages (/api/v1/integrations/…) : reconstruire l'image ensuite ;
  4. reporter claude_code_plugin/ et rayonne-codex/ dans la marketplace ezeeFlop/claude-plugins (Codex sous plugins/rayonne-codex), et pousser.

Metadata

Release files for rayonne-mcp 0.8.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rayonne-mcp 0.8.0
File Size Uploaded Provenance Actions
rayonne_mcp-0.8.0.tar.gz 459.4 kB Without provenance Details for rayonne_mcp-0.8.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for rayonne-mcp 0.8.0
File Interpreter ABI Platform Actions
rayonne_mcp-0.8.0-py3-none-any.whl Python 3 none any Details for rayonne_mcp-0.8.0-py3-none-any.whl

Total release size: 512.3 kB

Release files / rayonne_mcp-0.8.0.tar.gz

Download URL rayonne_mcp-0.8.0.tar.gz
Size 459.4 kB
Tags Source
SHA-256 checksum
How to use checksums
492c37d2889082f3a65ed477c80d85dfcd23f6ad1b84c3373626cdd130ccbef4
BLAKE2b-256 checksum
How to use checksums
dbba05b7ad3ce4e2532093b06cb8c2770a0e5cda68263c694e2f4d1570f63056
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.3

Release files / rayonne_mcp-0.8.0-py3-none-any.whl

Download URL rayonne_mcp-0.8.0-py3-none-any.whl
Size 52.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ee39636e15540325b9d668e1c685381b0cb87514e95cb5247b58975840d330ce
BLAKE2b-256 checksum
How to use checksums
ea1c58428494d5d05eba3067ebee54048ad1c8f10fc398986fd25501467592f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.3

Security for rayonne-mcp 0.8.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page