Autenticazione
Ogni richiesta a https://mcp.more.you/api richiede un header Authorization con un token Bearer. Hai due modi per ottenerlo.
OAuth (consigliato per i client AI)
I client AI eseguono la Dynamic Client Registration al primo collegamento, poi guidano l'utente in una schermata di consenso OAuth. La pagina /mcp/connect gestisce tutto in automatico. Il tuo client riceve un token di accesso valido 30 giorni.
Chiave API
Per script e CI, genera una chiave API personale nell'app More.You in Account → Chiavi API. La chiave inizia con apikey_ e viene presentata come un normale token bearer.
Endpoint
Tutte le chiamate agli strumenti vanno a un unico endpoint JSON-RPC 2.0 via HTTPS POST.
Strumenti
list_scheduled_posts
Elenca i tuoi post programmati (in coda per la pubblicazione ma non ancora inviati).
Argomenti
limitfromRestituisce
Un oggetto con posts: [{id, platform, content, scheduledAt, status}]. Fino a limit risultati.
Esempio
curl -X POST https://mcp.more.you/api \
-H "Authorization: Bearer apikey_xxx" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","id":1,
"params":{"name":"list_scheduled_posts",
"arguments":{"limit":5}}}'
list_drafts
Elenca le tue bozze (non ancora programmate).
Argomenti
limitRestituisce
Un oggetto con drafts: [{id, platform, content, updatedAt}]. Fino a limit risultati.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":2,
"params":{"name":"list_drafts","arguments":{"limit":10}}}
list_connected_accounts
Elenca gli account social collegati al tuo team.
Argomenti
Nessun argomento.
Restituisce
Un oggetto con accounts: [{platform, handle, connected, lastSyncAt}].
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":3,
"params":{"name":"list_connected_accounts","arguments":{}}}
get_account_healthPiano a pagamento
Ottieni un riepilogo dello stato di tutte le piattaforme collegate.
Argomenti
platformwindowDaysRestituisce
Un oggetto con windowDays, postsScheduled, postsPublished, postsFailed, un dettaglio byPlatform e topErrors[].
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":4,
"params":{"name":"get_account_health",
"arguments":{"windowDays":30}}}
create_post_draft
Crea una nuova bozza di post. Le bozze non vengono pubblicate in automatico.
Argomenti
platformcontentmediaUrlsclientRequestIdRestituisce
Un oggetto con la nuova bozza: {id, platform, content, status: "DRAFT", createdAt}.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":5,
"params":{"name":"create_post_draft",
"arguments":{"platform":"twitter",
"content":"Hello from MCP"}}}
update_post_draft
Aggiorna una bozza esistente. Devi indicare almeno uno tra content e mediaUrls.
Argomenti
postIdcontentmediaUrlsclientRequestIdRestituisce
Un oggetto con la bozza aggiornata: {id, platform, content, mediaUrls, status, updatedAt}.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":6,
"params":{"name":"update_post_draft",
"arguments":{"postId":"",
"content":"Updated copy"}}}
connect_channel
Genera un URL monouso che l'utente può aprire per autorizzare il collegamento a una nuova piattaforma.
Argomenti
platformRestituisce
Un oggetto con authUrl (link monouso che l'utente apre per autorizzare), expiresAt e platform.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":7,
"params":{"name":"connect_channel",
"arguments":{"platform":"linkedin"}}}
schedule_post
Sposta una bozza (stato DRAFT) nella coda di pubblicazione BullMQ a un orario futuro. Idempotente entro ±60 s di scarto; rifiuta i tentativi di riprogrammare a un orario diverso senza prima un annullamento esplicito.
Argomenti
postIdscheduledAtRestituisce
Un oggetto con postId, scheduledAt (ISO), status: SCHEDULED.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":8,
"params":{"name":"schedule_post",
"arguments":{"postId":"",
"scheduledAt":"2026-05-10T09:00:00Z"}}}
cancel_scheduled_post
Annulla un post programmato e lo toglie dalla coda di pubblicazione. La bozza di partenza resta salvata.
Argomenti
postIdRestituisce
Un oggetto con postId e status: CANCELLED.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":9,
"params":{"name":"cancel_scheduled_post",
"arguments":{"postId":""}}}
delete_draft
Elimina definitivamente una bozza. Rifiuta i post che non sono DRAFT (usa cancel_scheduled_post per quelli SCHEDULED).
Argomenti
postIdRestituisce
Un oggetto con postId e deleted: true.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":10,
"params":{"name":"delete_draft",
"arguments":{"postId":""}}}
get_post
Restituisce il PostGroup completo per un postId, con contenuto per piattaforma, stato e timestamp.
Argomenti
postIdRestituisce
Un oggetto con postId, status, scheduledAt, createdAt, updatedAt e providers (record piattaforma → contenuto).
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":11,
"params":{"name":"get_post",
"arguments":{"postId":""}}}
search_posts
Cerca una sottostringa (senza distinzione tra maiuscole e minuscole) nel testo dei post del team attivo. Filtri: status, platform, limit (1-100, predefinito 20).
Argomenti
querystatusplatformlimitRestituisce
Un oggetto con posts: [{postId, status, platforms, snippet, scheduledAt, updatedAt}]. Lo snippet contiene il contesto trovato, con i puntini di sospensione ai due lati.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":12,
"params":{"name":"search_posts",
"arguments":{"query":"launch","limit":10}}}
list_teams
Restituisce i team di cui l'utente autenticato è proprietario o amministratore, con il team attivo segnalato.
Argomenti
Nessun argomento.
Restituisce
Un oggetto con currentTeamId e teams: [{teamId, teamName, isCurrent}].
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":13,
"params":{"name":"list_teams","arguments":{}}}
set_current_team
Cambia il team attivo per questo token Bearer. L'utente deve esserne membro. Viene salvato nel documento del token OAuth; la modifica in sessione ha effetto subito sugli strumenti successivi della stessa conversazione.
Argomenti
teamIdRestituisce
Un oggetto con teamId, teamName, persisted (true con OAuth, false con chiave API) e una nota facoltativa.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":14,
"params":{"name":"set_current_team",
"arguments":{"teamId":"team_xxxxx"}}}
get_plan_limits
Legge il livello di abbonamento attuale dell'utente e le quote per livello (canali, spazio, crediti AI, pubblicazione). Disponibile in ogni piano. Utile prima degli strumenti che modificano dati, per prevedere se la chiamata sarà bloccata.
Argomenti
Nessun argomento.
Restituisce
Un oggetto con tier, tierDisplayName, isPaid, isTrial, upgradeUrl, limits (channels/storage/aiCalls/posts, ciascuno come {limit, current, exceeded} o {limit, allowed}) e creditsAvailable ({total, subscriptionRemaining, purchasedBalance} oppure null).
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":15,
"params":{"name":"get_plan_limits","arguments":{}}}
get_post_metrics
Recupera le metriche di interazione di un post pubblicato su ogni piattaforma a cui è stato inviato. Twitter e Instagram restituiscono metriche complete (Mi piace, retweet/condivisioni, commenti/risposte, impression); LinkedIn, Threads e TikTok restituiscono solo stato di pubblicazione e URL (la raccolta delle interazioni arriverà in una versione successiva). Un riepilogo normalizzato somma Mi piace, commenti, condivisioni e impression delle piattaforme che le hanno fornite.
Argomenti
postId ID del post More.You ottenuto da una chiamata di elenco.
Restituisce
Un oggetto con postId, status, providers: [{platform, publishedPostId, publishedUrl, publishedAt, status, metrics}] e totals: {likes, comments, shares, impressions}. metrics è un oggetto con conteggi numerici per piattaforma, oppure null se la piattaforma non raccoglie ancora le interazioni.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":16,
"params":{"name":"get_post_metrics",
"arguments":{"postId":""}}}
get_publish_status
Scopri cosa è successo a un post programmato: stato in coda, esito o errore per piattaforma, tempo di elaborazione e job id del worker. Restituisce isScheduled=false per i post che esistono come bozze ma non sono mai entrati nella coda di pubblicazione, con un suggerimento che rimanda a schedule_post.
Argomenti
postId ID del post More.You ottenuto da una chiamata di elenco.
Restituisce
Un oggetto con postId, isScheduled, status, scheduledAt, publishedAt, platforms, processingTimeMs, jobId, topLevelError e results: [{platform, success, publishedPostId, publishedAt, error}]. Include hint quando isScheduled è false.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":17,
"params":{"name":"get_publish_status",
"arguments":{"postId":""}}}
update_brand_profile
Modifica il profilo del brand attivo dell'utente. Campi consentiti: bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize. Qualsiasi altro campo viene scartato senza avviso. «Attivo» viene risolto prima come predefinito del team, poi come primo profilo attivo dell'utente.
Argomenti
brandVoice Array di descrittori della voce del brand (per esempio ["professional", "concise"]).
Altri campi modificabili: bio, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize.
Restituisce
Un oggetto con profileId, name, updated: [nomi dei campi modificati] e i valori attuali di bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize dopo la modifica.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":18,
"params":{"name":"update_brand_profile",
"arguments":{"brandVoice":["professional","concise"]}}}
get_best_time_to_post Piano a pagamento
Consiglia i primi N slot (dayOfWeek, hour) per il prossimo post su una piattaforma, ordinati per interazioni per post negli ultimi 90 giorni. Twitter e Instagram restituiscono punteggi pesati sulle interazioni; LinkedIn, Threads e TikTok ordinano solo per frequenza di pubblicazione. Gli orari usano il fuso IANA indicato (predefinito UTC). Richiede un piano a pagamento.
Argomenti
platform Piattaforma social: twitter, instagram, linkedin, threads o tiktok.
timezone Nome del fuso IANA (per esempio Europe/Berlin, America/New_York). Predefinito UTC.
topN Numero di slot consigliati da restituire (1-24, predefinito 5).
Restituisce
Un oggetto con platform, timezone, sampleWindowDays, sampleSize, metricsAvailable e recommendations: [{dayOfWeek (1-7, lun=1), dayLabel, hour (0-23), score, basedOn: {posts, avgEngagement}}]. Include hint per i casi di avvio a freddo o di metriche non disponibili.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":19,
"params":{"name":"get_best_time_to_post",
"arguments":{"platform":"twitter","timezone":"Europe/Berlin","topN":5}}}
search_tools
Cerca nel catalogo degli strumenti MCP con testo libero, categoria o intento. Restituisce categorie, requiresScope, descrizioni di una riga e i tag di utilizzo che hanno corrisposto. Gratis in tutti i piani (serve a scoprire gli strumenti).
Argomenti
Tutti facoltativi. Chiama senza argomenti per elencare ogni strumento disponibile.
query Ricerca a testo libero su nomi, descrizioni e tag di utilizzo degli strumenti.
category Filtra per una categoria: posts, accounts, analytics, brand, teams, discovery, other.
Restituisce
Un oggetto con totalTools, matchCount, categories: [string[]] e tools: [{name, category, requiresScope, description, useCases, matchedOn: [name|category|description|use_case]}]. Include hint quando non ci sono risultati o non c'è alcun filtro.
Esempio
{"jsonrpc":"2.0","method":"tools/call","id":20,
"params":{"name":"search_tools",
"arguments":{"query":"why did my post fail"}}}
Risorse MCP
Le risorse sono contesto di sola lettura che il client può recuperare con il metodo MCP resources/read. Claude le legge all'inizio della conversazione, così conosce account, team e brand senza che tu lo ripeta a ogni sessione.
moreyou://account/summary
Email e nome utente dell'account (così Claude può confermare su quale account sta lavorando), piano, crediti AI usati / limite, numero di bozze, di post programmati e di canali collegati. I conteggi sono limitati a 100 ciascuno per un caricamento rapido.
moreyou://channels/connected
Stessa struttura del risultato di list_connected_accounts; esposto come risorsa così Claude lo legge una volta all'inizio della conversazione (senza il passaggio di una chiamata a uno strumento).
moreyou://brand-profiles/active
Il profilo del brand attivo dell'utente (predefinito del team, altrimenti il primo profilo proprio). Restituisce solo i campi utili al modello: bio, expertiseAreas, personalityTraits, brandVoice, mainThemes, audienceSize, preferredHashtags.
moreyou://teams/current
Metadati del team attuale (teamId, teamName) più il conteggio totalTeamsAvailable. Abbinala a list_teams + set_current_team per cambiare team.
Flussi con nome
Scorciatoie dal menu dei comandi slash che coordinano più strumenti. Scegline una e lascia che il tuo assistente AI porti a termine un'attività in più passaggi, chiedendo conferma prima di modificare qualsiasi cosa.
/weekly-plan
Legge profilo del brand, canali collegati e post in coda, poi propone 5-10 bozze distribuite da lunedì a venerdì.
/draft-thread
Scrive un thread di 5-10 post per Twitter o Threads su un argomento o un URL che indichi, nella voce del tuo brand.
/audit-queue
Passa in rassegna i post programmati dei prossimi 7 giorni e segnala duplicati, piattaforme sovraccariche e buchi.
/channel-sweep
Confronta i canali collegati con quelli supportati e suggerisce quali collegare o aggiornare.
Endpoint di discovery e OAuth
Metadati conformi agli standard, così qualsiasi client MCP può configurarsi da solo.
GET /.well-known/oauth-protected-resource/api: RFC 9728GET /.well-known/oauth-authorization-server: RFC 8414GET /oauth/.well-known/openid-configuration: OIDCPOST /oauth/reg: Dynamic Client Registration (RFC 7591)GET /oauth/auth: autorizzazione (PKCE-S256 obbligatorio)POST /oauth/token: scambio del token
Open source
Ricette pronte da incollare e un riferimento per sviluppatori si trovano nel nostro repository pubblico della documentazione. Licenza MIT; le pull request sono benvenute. github.com/moreyouhq/moreyou-mcp
Gestisci i social da qualsiasi assistente AI
Pianifica, scrivi, programma e controlla i post su 7 piattaforme chattando con Claude, ChatGPT o Cursor. Una connessione sicura, tutte le funzioni di More.You.
