truth-social-mcp
Truth Social MCP
A local Python MCP 2.x server for explicitly authorized Truth Social access. It keeps model-facing tools separate from credential setup, defaults to read-only, and treats all social content as untrusted external data.
Current safety boundary
Truth Social's current Terms of Service
prohibit automated/non-human access and data extraction unless separately
authorized. The server therefore starts and
negotiates MCP normally, but live network calls fail closed until
TRUTH_SOCIAL_MCP_AUTHORIZED=1 is configured. Set that variable only after
obtaining written authorization or an official API agreement.
This project does not bypass Cloudflare, impersonate a browser, or treat a logged-in browser session as API authorization.
Related MCP server: x-mcp
Requirements
Python 3.10+
An OS credential store supported by Python
keyring(macOS Keychain on macOS)An externally issued bearer token for authenticated tools
Written permission or an official Truth Social API agreement for live use
uv0.11.26 for the reproducible locked installation below
Install
From a source checkout, install the exact dependency graph recorded in
uv.lock:
cd /absolute/path/to/truth-social-mcp
uv sync --locked --extra dev --no-editable --python python3Portable pip fallback (compatible, but not locked to the exact transitive
versions in uv.lock):
cd /absolute/path/to/truth-social-mcp
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/pip install '.[dev]'The install creates two cwd-independent commands:
.venv/bin/truthsocial-mcp— MCP stdio server.venv/bin/truthsocial-auth— out-of-band token management
The two console commands are part of the installed Python distribution. By
contrast, run.sh is a convenience launcher that belongs to the source
checkout; it resolves that checkout's .venv regardless of the MCP host's
working directory. A wheel installation does not install run.sh or the
config-examples directory.
Configure a token safely
Never paste a password, OTP, bearer token, cookie, or access code into an MCP conversation. Import an externally authorized token directly in Terminal:
.venv/bin/truthsocial-auth set-token --username your_handle --scope read
.venv/bin/truthsocial-auth statusDeclared scopes are enforced locally as an additional safety gate. If an
authorized token is permitted to perform every supported mutation, import it
with --scope read --scope write --scope follow; write covers post/media/
like/retruth/delete operations, while follow covers follow/unfollow. Enabling
the write environment flag alone never overrides a missing local scope.
The command prompts for the token without echoing it. The token is stored in the
operating-system credential store selected by keyring (Keychain on macOS).
~/.truth_social_mcp/session.json contains only non-secret metadata and is
written atomically with mode 0600 inside a 0700 directory.
To remove the token:
.venv/bin/truthsocial-auth clearRun and register
For a normal environment installation, point the MCP host directly at the installed console command:
{
"mcpServers": {
"truth-social": {
"command": "/absolute/path/to/truth-social-mcp/.venv/bin/truthsocial-mcp",
"args": []
}
}
}Codex registration for the installed console command:
codex mcp add truth-social -- /absolute/path/to/truth-social-mcp/.venv/bin/truthsocial-mcpWhen Codex should follow the source checkout's .venv, the repository launcher
is equivalent:
codex mcp add truth-social -- /absolute/path/to/truth-social-mcp/run.shconfig-examples/continue_config.yaml is the current Continue configuration.
continue_config.legacy.json is retained only for older Continue releases that
still use the deprecated JSON configuration.
The server is intentionally useful even when network access is disabled:
truth_auth_status reports local configuration without reading the network.
Authorization and environment
After written authorization or an official API agreement, enable live calls in the MCP host's environment:
TRUTH_SOCIAL_MCP_AUTHORIZED=1Optional settings:
Variable | Default | Purpose |
|
| Permit live API calls after external authorization |
|
| Register mutation tools at startup |
|
|
|
|
| Maximum local media size |
|
| Request timeout |
|
| API origin; mainly for authorized/test deployments |
|
| Permit a non-Truth-Social HTTPS test/authorized origin |
|
| Honest client identification |
Tool surface
Default server tools:
Local:
truth_auth_status,truth_logoutPublic API:
truth_instance_info,truth_lookup_user,truth_get_user_posts,truth_get_statusToken-required reads:
truth_verify,truth_get_user,truth_followers,truth_following,truth_home_timeline,truth_trending,truth_get_thread,truth_search,truth_notifications
Truth Social's removed public timeline endpoint is not advertised. Search and trending are correctly marked token-required rather than returning fake empty results.
When both TRUTH_SOCIAL_MCP_AUTHORIZED=1 and
TRUTH_SOCIAL_MCP_ALLOW_WRITES=1 are present at server startup, these additional
tools are registered:
truth_post_status,truth_delete_statustruth_like,truth_unliketruth_reblog,truth_unreblogtruth_follow,truth_unfollowtruth_upload_media
Every mutation requires schema-level confirm: true. Posting also uses an
idempotency key. Uploads accept only relative paths beneath configured roots,
reject symlinks and non-regular files, enforce size limits, and verify supported
media signatures.
Error behavior
MCP 2.x validates tool arguments before executing handlers.
Tool failures return real
isError: trueresults.Upstream HTML, response bodies, tokens, cookies, usernames, query strings and local paths are not copied into error messages.
Stable error codes distinguish missing auth, forbidden access, missing resources/endpoints, rate limits, invalid payloads and network failures.
Public and authenticated HTTP traffic use physically separate clients; anonymous calls cannot inherit an account token or cookie.
Test
.venv/bin/pytest
.venv/bin/python -m pip check
uv lock --checkThe default suite uses in-memory MCP sessions and httpx.MockTransport; it does
not contact Truth Social and never performs a real post, like, follow, upload or
delete. A subprocess test starts run.sh from outside the repository to protect
against cwd/import regressions and also exercises the installed console
entrypoint. CI repeats the locked install and full suite on Python 3.10, 3.11,
and 3.12.
Known external limitations
Truth Social does not currently publish a stable, generally authorized API contract for this use. Endpoint availability, authentication requirements, Cloudflare policy and account permissions may change independently of this server. Passing local tests proves the MCP implementation, not external API permission or future availability.
License
MIT. See LICENSE.
Available Tools
15 toolstruth_auth_statusARead-onlyIdempotent
Show local token/configuration state without contacting Truth Social.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the valuable context that no network call is made, but it does not go further into return format or other behavioral traits. This is comparable to the 'get_calls' calibration example, which also scored 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb 'Show' and the key resource, with no wasted words. It earns a perfect conciseness score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no params) and has an output schema, so the description does not need to cover return values. The local-only behavior is explicitly stated, making the description complete for invocation purposes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the description does not need to explain parameters. Per the baseline rule for 0-param tools, a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: showing local token/configuration state. It explicitly distinguishes itself from tools that contact Truth Social, which differentiates it from siblings like truth_verify or truth_get_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without contacting Truth Social' provides clear context that this tool is for local/offline checks. However, it does not explicitly name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_followersARead-onlyIdempotent
List followers for an account. An authorized token is required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds the useful context that an authorized token is required, which is not captured in the annotations. This provides meaningful behavioral information beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary action. Every word is useful, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and annotations plus the output schema provide solid context. However, the description does not discuss how this tool relates to sibling tools like 'truth_following' or clarify whether the token must belong to the queried account. This leaves some ambiguity in a broader workflow, making it adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that 'account_id' refers to the account whose followers are listed, but it does not explain the 'limit' parameter or its effect on pagination/result count. The schema's default and constraints give some hints, but the description adds minimal value beyond the purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List followers for an account' with a specific verb and resource, clearly distinguishing it from the sibling 'truth_following' which lists following accounts instead. This is a precise, unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description mentions that an authorized token is required, but it does not explain when this tool is appropriate (e.g., for viewing followers vs. following) or exclude any scenarios. No alternative tools are referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_followingARead-onlyIdempotent
List accounts followed by a user. An authorized token is required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the authentication requirement, which is useful, but it does not disclose other behavioral traits like token ownership, rate limits, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and contains no redundant or filler information. It earns its place efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with a rich output schema and strong annotations, the description is mostly sufficient. It covers the core purpose and authentication, but lacks mention of pagination or the relationship between account_id and the authorized token. Still, the overall context is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fails to explain the meanings of the parameters. It only implies that 'a user' corresponds to account_id, but the limit parameter's purpose is entirely unaddressed. A simple clarification of account_id and limit would have been expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('accounts followed by a user'), clearly distinguishing this from sibling tools like truth_followers (which would list followers). The scope is explicit, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a prerequisite (authorized token required) but no explicit guidance on when to use this tool versus alternatives such as truth_followers. The usage context is implied by the wording, but no when-to-use or when-not-to-use conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_get_statusARead-onlyIdempotent
Fetch one public Truth Social post by numeric ID.
| Name | Required | Description | Default |
|---|---|---|---|
| status_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds the 'public' scope and numeric ID input, but does not disclose behaviors like error handling or response format. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the purpose. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with strong annotations and an output schema, the description is adequate. It could mention behavior on invalid IDs or note that it returns a single post, but the output schema and annotations cover most needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter (status_id) with a pattern but no description. The tool description clarifies that the parameter is a numeric ID of the post, which compensates for the lack of schema description. It adds meaning beyond the raw pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Fetch'), a resource ('public Truth Social post'), and a method ('by numeric ID'). It distinguishes from sibling tools like truth_get_thread and truth_get_user_posts, which fetch a thread or a user's posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching a single public post by ID, which differentiates it from thread or user post tools. However, it does not explicitly state when to use this tool over alternatives, or mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_get_threadARead-onlyIdempotent
Fetch a post and its ancestors/descendants. An authorized token is required for context.
| Name | Required | Description | Default |
|---|---|---|---|
| status_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds that an authorized token is required, which is a behavioral prerequisite not covered by annotations. However, it does not clarify what 'context' means or any additional behavior, so it provides limited extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, each with clear value: the action and the auth requirement. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only tool with one parameter, output schema, and rich annotations, the description covers the core purpose and adds the auth constraint. However, the phrase 'required for context' is somewhat ambiguous, and no mention of the thread structure or edge cases is made, leaving minor gaps. Overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (status_id) with 0% description coverage. The description only mentions 'a post' without naming or explaining the parameter, leaving the agent to infer that status_id identifies the target post. This does not adequately compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('a post and its ancestors/descendants'), clearly distinguishing it from sibling tools like truth_get_status which likely fetches only a single status. It precisely names the thread scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, but the phrase 'ancestors/descendants' implies thread retrieval, providing some implicit guidance. No explicit exclusions or alternative tool names are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_get_userBRead-onlyIdempotent
Fetch a Truth Social account by numeric ID. An authorized token is required.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description correctly adds the auth requirement. However, it does not disclose what happens without a token, rate limits, or response structure, leaving some behavioral aspects unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the main action and scope. Every word adds value, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema present, annotations covering safety), the description is largely complete. Its main gap is the lack of differentiation from truth_lookup_user, but this is more of a usage guidance issue. Overall, it covers the essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It does say 'by numeric ID', which maps directly to account_id, and the schema provides a pattern. But it does not explain what the ID represents or how to find it, though for a single parameter this is minimally acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Fetch') and resource ('Truth Social account') with a specific scope ('by numeric ID'). It differentiates from siblings like truth_get_status and truth_get_thread, but does not explicitly distinguish it from truth_lookup_user, which may be a similar lookup tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance provided is that an authorized token is required. There is no indication of when to use this tool versus alternatives like truth_lookup_user or truth_get_user_posts, nor any context about prerequisites beyond the token.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_get_user_postsBRead-onlyIdempotent
Fetch recent public posts for a username. Pagination IDs must be numeric.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| max_id | No | ||
| pinned | No | ||
| since_id | No | ||
| username | Yes | ||
| exclude_reblogs | No | ||
| exclude_replies | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety is covered. The description adds the constraint that pagination IDs must be numeric, which is useful behavioral context, but it does not disclose other traits like response pagination behavior or whether posts from private accounts are excluded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, with two sentences that front-load the core purpose and follow with a constraint. There is no redundant or irrelevant content, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the tool has 7 parameters and no parameter descriptions. The description does not explain how to paginate using max_id/since_id, what 'pinned' means, or the effect of exclude_reblogs/exclude_replies. This leaves significant gaps for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameters. It clarifies that pagination IDs must be numeric (relating to max_id and since_id) but provides no explanation for limit, pinned, exclude_reblogs, or exclude_replies. The description adds minimal meaning beyond the schema's type/default information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Fetch recent public posts for a username' uses a specific verb (fetch) and resource (public posts for a username), clearly indicating the tool's function. It distinguishes from siblings like truth_get_status or truth_home_timeline by focusing on a specific user's posts, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus siblings such as truth_get_user or truth_home_timeline. The only operational note ('Pagination IDs must be numeric') is a constraint, not a usage guideline, so the tool lacks context for appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_home_timelineARead-onlyIdempotent
Fetch the authorized account's home timeline.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| max_id | No | ||
| since_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds the scoping to the authorized account, which is useful, but it does not disclose pagination behavior or response format (though an output schema exists). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with zero filler. It front-loads the action ('Fetch') and resource, achieving maximum clarity with minimal words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
As a simple read tool with rich annotations and an output schema, the description covers the essential purpose. However, it lacks parameter explanations and explicit usage guidance, so it is not fully complete for an agent without prior knowledge of timeline pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain limit, max_id, or since_id. While param names are somewhat self-evident and constraints exist, the description fails to compensate for the lack of schema-level documentation, leaving pagination semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Fetch the authorized account's home timeline.' It clearly distinguishes from siblings like truth_get_status (fetch a single status) or truth_get_user_posts (fetch a user's posts), making the tool's unique scope apparent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the resource clearly (home timeline of authorized account) but does not provide explicit guidance on when to use this tool versus alternatives like truth_search or truth_get_user_posts. Usage is more implied than explicitly contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_instance_infoARead-onlyIdempotent
Fetch public Truth Social instance capabilities and limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds the context that the data is 'public' and focuses on capabilities/limits, which is useful but not extensive. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence with no filler, front-loading the verb and resource. Everything earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, no-parameter read-only tool with strong annotations and an output schema, the description sufficiently conveys purpose and scope. No additional details are necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The schema coverage is 100% vacuously, and the description accurately reflects that no input is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Fetch') and object ('public Truth Social instance capabilities and limits'), distinguishing it from sibling tools that handle statuses, users, or timelines. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative guidance is provided, but the purpose implies it should be used when an agent needs instance-level capabilities or limits. There are no sibling tools with overlapping functionality, so the context is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_logoutADestructiveIdempotent
Delete the locally stored Truth Social token from Keychain. Requires explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveness and non-read-only, but the description adds specific context about what is destroyed (the locally stored Keychain token) and that explicit confirmation is required. This goes beyond the structured fields, although it doesn't detail potential side effects beyond token deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the action, the target, and the confirmation prerequisite.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter destructive tool with rich annotations and an output schema, the description is complete. It covers the operation scope and the confirmation requirement, leaving no significant gaps for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It does by stating 'Requires explicit confirmation,' which directly explains the meaning and purpose of the 'confirm' parameter (must be true). This adds semantic value beyond the schema's 'const: true' constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the target ('locally stored Truth Social token from Keychain'), which is specific and distinguishable from all sibling tools that perform read or search operations. It fully clarifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for logging out by deleting the local token and explicitly notes that explicit confirmation is required. While it doesn't mention alternatives or exclusions, the context is clear because no other sibling tool handles logout, and the confirmation requirement is a key usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_lookup_userARead-onlyIdempotent
Resolve a public Truth Social username to a compact account record.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds context by specifying 'public' (indicating no auth needed) and 'compact' (hinting at response shape), which goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with no fluff, front-loading the action and resource. Every word adds value, and it is appropriately sized for a simple lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has an output schema (so return details are covered), and rich annotations. The description is nearly complete, but lacks explicit differentiation from truth_get_user; the word 'compact' provides an implicit cue, making it slightly above average.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only one parameter (username), the description explicitly clarifies it is a public Truth Social username, compensating for the lack of schema descriptions. It does not detail format like '@' handling, but that is a minor gap for a single string parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resolve') with a clear resource ('public Truth Social username') and output ('compact account record'). It distinguishes from siblings like truth_get_user by implying a lighter-weight result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this vs. alternatives such as truth_get_user. The description does not mention when to prefer this tool or any exclusions, leaving the agent to infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_notificationsBRead-onlyIdempotent
Fetch notifications for the authorized account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| max_id | No | ||
| since_id | No | ||
| exclude_types | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds the account-scoping behavior ('for the authorized account'), which is useful context. However, it does not disclose pagination behavior, rate limits, or what notification types are returned, so it adds only modest value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the action and resource. There is no extraneous information, and it is appropriately concise for the tool's straightforward purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having output schema and annotations, the description lacks essential guidance for the agent. It does not explain when to use this tool versus siblings, nor does it clarify how parameters like exclude_types behave. The minimal description is inadequate for a tool with 4 parameters and potential ambiguity with similar fetch tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. The description does not mention limit, max_id, since_id, or exclude_types, leaving the agent to guess their roles. Parameter names are somewhat self-explanatory, but the description provides no added semantic value, making this a weak area.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and the resource ('notifications') scoped to 'the authorized account.' This distinguishes it from siblings like home_timeline or trending, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of scenarios, prerequisites, or exclusions. The description omits any comparison with sibling tools like home_timeline, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_searchARead-onlyIdempotent
Search statuses, accounts or hashtags. Truth Social requires an authorized token.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| resolve | No | ||
| search_type | No | statuses |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a meaningful behavioral note that Truth Social requires an authorized token, which is not present in the annotations. Since annotations already declare readOnlyHint=true and destructiveHint=false, the added auth requirement provides valuable context without contradicting the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the main purpose and immediately follows with an essential requirement. Every word earns its place, making it an excellent example of concise, well-structured documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich output schema and strong annotations, the description covers the primary purpose and key prerequisite (auth token). However, the lack of parameter semantics means the description is not fully self-sufficient. For a relatively simple search tool, it meets most needs but leaves room for improvement in explaining how to configure a search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions for any parameters (0% coverage), so the description must compensate. It only addresses the search_type parameter by listing statuses, accounts, and hashtags, but leaves query, limit, and resolve unexplained. This is insufficient for an agent to understand the full parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool searches statuses, accounts, or hashtags, which aligns with the search_type enum and clearly distinguishes it from sibling tools like truth_get_status or truth_lookup_user. The verb 'search' plus the resource types makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this is a general-purpose search tool for multiple content types, providing clear context for when to use it. It does not explicitly mention alternatives or exclusions, but the sibling tool list makes it evident that dedicated retrieval tools exist for specific resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_trendingARead-onlyIdempotent
Fetch trending statuses. Truth Social currently requires an authorized token.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds the explicit requirement that an authorized token is currently needed, including the nuance that this may change over time ('currently'). This is valuable operational context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the tool's function, the second adds an essential auth note. No wasted words and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with a single optional parameter, a rich annotation set, and an existing output schema. The description covers the purpose and the critical auth requirement. It does not fully explain the limit parameter or alternatives, but overall it is sufficient for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain the 'limit' parameter. The schema provides type, default, and bounds, but the description does not compensate for the missing semantic meaning. While 'limit' is conventionally understood, the description offers no direct support.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Fetch') and resource ('trending statuses'). The plural 'statuses' distinguishes it from single-status tools like truth_get_status and from search/home timeline tools. The name reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the primary use case: fetching trending statuses. It also provides an important prerequisite (authorized token). However, it gives no explicit guidance on when to choose this over siblings like truth_search or truth_home_timeline, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truth_verifyARead-onlyIdempotent
Verify the configured bearer token and return its account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, covering the safety profile. The description adds the token-verification context and account return, but does not disclose edge cases like invalid token handling or rate limits. This is adequate given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that is precise and free of redundancy. Every word contributes to the meaning, making it optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with a rich output schema and comprehensive annotations, the description is sufficiently complete. It states the core action and expected result, and the annotations cover safety and side-effect characteristics. No additional context is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty. Per guidelines, a baseline of 4 is appropriate. The description coherently implies that the tool operates on the pre-configured bearer token, so no parameter explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Verify') and resource ('configured bearer token'), with the outcome 'return its account'. It is distinct from sibling tools like truth_auth_status or truth_get_status, focusing on token validation rather than general status or data retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. While the purpose is clear, there is no mention of exclusions or relationships to siblings such as truth_auth_status, which may overlap in functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource and action: posts (get_status, get_thread), search, users (lookup_user, get_user, get_user_posts), relationships (followers, following), timelines (home_timeline, trending), notifications, and auth (auth_status, logout, verify). Even get_status and get_thread are clearly differentiated by thread context.
All tools share the truth_ prefix, but the pattern after the prefix is inconsistent: some are verb_noun (get_status, lookup_user), some are single verbs (search, logout), and some are bare nouns (followers, trending). This mixed style makes the set less predictable.
15 tools is within the well-scoped range for a social media API server, covering posts, users, relationships, timelines, notifications, and auth. Each tool serves a clear purpose without feeling bloated.
The tool set is heavily read-oriented and lacks any write operations such as posting, liking, replying, or following. While it covers the main read paths, the absence of social interactions makes it an incomplete client for the stated domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Twitter/X read-only MCP server — 12 tools: search, users, tweets, followers, timelines, trends.
Hosted MCP for X/Twitter and Reddit. 12 read-only tools, no API keys, free during beta.
Mastodon MCP — public Mastodon data via mastodon.social (no auth required)
FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol server that enables programmatic interaction with Twitter API, allowing users to post tweets, search for content, and retrieve user timelines through standardized MCP tools.19MIT
- AlicenseNot gradedqualityDmaintenanceA read-only X/Twitter MCP server that enables data retrieval for user profiles, tweets, and social graphs using OAuth 2.0 Bearer Token authentication. It supports searching recent tweets, viewing timelines, and tracking engagement metrics like followers, likes, and retweets.3MIT
- FlicenseNot gradedqualityBmaintenanceRead-only MCP server for public X/Twitter search and retrieval via twitter.2-38.com
- AlicenseAqualityBmaintenanceMCP server for the Twitter/X read API, enabling search, user profiles, tweets, followers, and more via natural language.94149MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/devrim-1283/truth-social-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server