writefreely-mcp-server
Allows publishing and managing posts and collections on Write.as (and self-hosted WriteFreely instances).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@writefreely-mcp-serverpublish a post titled 'Hello World' with content 'This is a test post'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
writefreely-mcp-server
An MCP server for WriteFreely that enables AI agents to publish and manage content on WriteFreely instances (including self-hosted instances and Write.as).
Features
Publish posts (anonymous or authenticated)
Manage collections and posts
Browse public feeds
Support for Write.as and self-hosted WriteFreely instances
Related MCP server: Paragraph MCP
Installation
Installing uv or uvx
If you don't have uv or uvx installed, you can install them using one of the following methods:
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Using Homebrew (macOS):
brew install uvUsing pip:
pip install uvAfter installation, uvx will be available as part of uv. See the uv documentation for more details.
Using uvx (recommended)
uvx --from writefreely-mcp-server writefreely-mcpUsing uv
uv tool install writefreely-mcp-server
writefreely-mcpUsing pip
pip install writefreely-mcp-serverConfiguration
Configure via environment variables:
WRITEFREELY_BASE_URL- Base URL (default:https://write.as)WRITEFREELY_ACCESS_TOKEN- Access token for authenticationWRITEFREELY_DEFAULT_LANGUAGE- Default language (default:en)
Getting an Access Token
curl -X POST https://write.as/api/auth/login \
-H "Content-Type: application/json" \
-d '{"alias": "your_username", "pass": "your_password"}'MCP Client Configuration
{
"mcpServers": {
"writefreely": {
"command": "uvx",
"args": ["--from", "writefreely-mcp-server", "writefreely-mcp"],
"env": {
"WRITEFREELY_BASE_URL": "https://write.as",
"WRITEFREELY_ACCESS_TOKEN": "your_token_here"
}
}
}
}Available Tools
login()- Authenticate with username/passwordpublish_post()- Create and publish a new postedit_post()- Update an existing postdelete_post()- Delete a postread_post()- Read a post by IDlist_my_posts()- List all your postslist_my_collections()- List all your collections/blogsbrowse_collection()- Browse posts in a collectionbrowse_public_feed()- Browse the public feed
License
MIT
Links
Available Tools
10 toolsbrowse_collectionA
List posts in a specific collection/blog.
Args:
collection_alias: The alias/name of the collection to browse
page: Page number for pagination (default: 1, returns 10 posts per page)
Returns:
Formatted list of posts in the collection
| Name | Required | Description | Default |
|---|---|---|---|
| collection_alias | Yes | ||
| page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions pagination behavior (page, default 10 posts per page) but does not cover authentication needs, error handling, or side effects. This is insufficient for a tool with no 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 concise, consisting of three short sentences in a standard docstring format. Each sentence serves a purpose: purpose, parameters, returns. No redundant information.
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 description covers the tool's operation and parameters adequately for a simple read operation. The output schema exists (as per context signals), so the vague return description 'Formatted list of posts' is acceptable. However, it could mention the format or any limits on the list.
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%, meaning the schema provides no parameter descriptions. The description compensates by clearly explaining both parameters: collection_alias as 'the alias/name of the collection' and page as 'page number for pagination (default: 1, returns 10 posts per page)'. This adds significant value beyond the schema.
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?
Description clearly states the tool lists posts in a specific collection/blog. It uses a specific verb 'list' and resource 'posts in a collection', which distinguishes it from sibling tools like browse_public_feed or list_my_collections.
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 clear context for when to use the tool (to list posts in a specific collection). However, it does not explicitly mention when not to use it or point to alternatives like browse_public_feed or list_my_posts, which are provided in sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_public_feedA
Read posts from the public read.write.as feed.
Args:
skip: Number of posts to skip for pagination
(default: 0, returns 10 posts per request)
Returns:
Formatted list of posts from the public feed
| Name | Required | Description | Default |
|---|---|---|---|
| skip | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only mentions reading and pagination behavior (10 per request) but fails to disclose authentication requirements, rate limits, or any side effects. This is insufficient for a tool that interacts with an external service.
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 highly concise: a single sentence for purpose, followed by parameter details and a return statement. No unnecessary words, and the main action 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?
Given the tool's simplicity (one optional parameter, presumed output schema), the description is adequate but lacks mention of authentication, error handling, or output format details. It does the minimum required.
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 description adds meaningful context beyond the schema: it explains that 'skip' is for pagination, notes the default of 0, and clarifies that each request returns 10 posts. This compensates for the schema's lack of description coverage.
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 verb 'read' and the specific resource 'public read.write.as feed,' distinguishing it from sibling tools like browse_collection. The purpose is 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 (e.g., read_post, list_my_posts). There is no mention of context or exclusion criteria, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postA
Permanently delete a post.
Args:
post_id: The ID of the post to delete
access_token: Access token from login() or WRITEFREELY_ACCESS_TOKEN env var
(optional if token is set via env var)
edit_token: Edit token for anonymous posts (from publish_post response)
Returns:
Success or error message
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | ||
| access_token | No | ||
| edit_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions 'permanently delete' and parameter details, but lacks disclosure of irreversible effects, required permissions, or error conditions.
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 concise with clear Args and Returns sections, using minimal sentences without 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 delete tool with no output schema, the description covers basic usage. However, it lacks context on error handling, deletion limitations (e.g., can't delete others' posts), and differentiation from edit_post.
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 0% description coverage, and the description adds significant meaning for all three parameters: post_id, access_token (with optional env var fallback), and edit_token (source for anonymous posts).
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 'Permanently delete a post', specifying the action and resource. It distinguishes from sibling tools like edit_post or publish_post.
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 on when to use this tool versus alternatives like edit_post, or prerequisites such as ownership or authentication requirements beyond parameter hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_postA
Update an existing post's content and/or title.
Args:
post_id: The ID of the post to update
content: The new body content for the post (Markdown supported)
title: Optional new title (leave None to keep existing title)
access_token: Access token from login() or WRITEFREELY_ACCESS_TOKEN env var
(optional if token is set via env var)
edit_token: Edit token for anonymous posts (from publish_post response)
Returns:
Success message with updated post URL or error
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | ||
| content | Yes | ||
| title | No | ||
| access_token | No | ||
| edit_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses token sourcing and Markdown support but lacks details on mutability (e.g., whether title is truly optional, overwriting behavior, or response format). Additional behavioral context would improve safety.
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 structured as a clear docstring with Args and Returns sections. It is reasonably concise, though the Args block could be slightly more compact. Sentences are functional and 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 description covers main execution steps but lacks detail on edge cases (e.g., error handling, rate limits, auth failure). With an output schema mentioned but not shown, the agent may need more guidance on expected return values. Adequate for simple updates but not comprehensive.
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 clarify parameters. It does so effectively: explains title's optionality, access_token's dual source, and edit_token's purpose for anonymous posts. This adds significant meaning beyond raw schema.
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 'Update an existing post's content and/or title,' specifying the verb and resource. It distinctively indicates modification rather than creation (publish_post) or deletion (delete_post), 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?
The description implies usage for editing existing posts but does not explicitly state when to use versus alternatives (e.g., when to create a new post vs. update). No exclusions or when-not scenarios are provided, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hello_writefreelyA
Simple test tool - confirms the WriteFreely MCP server is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states the tool is a 'simple test' confirming server status, which implies non-destructive, read-only behavior. However, it does not detail any side effects or limitations. For a trivial tool with no parameters, this is acceptable but not exemplary.
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 with no excess words. It is front-loaded with the core purpose and earns its place without any 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 has zero parameters and an output schema exists (per context signals), the description sufficiently covers its straightforward behavior. It does not need to explain return values as per rubric rules.
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 rule sets a baseline of 4. The description does not need to add parameter meaning since there are none.
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 it is a 'Simple test tool' that 'confirms the WriteFreely MCP server is running.' This provides a specific verb-resource combination and naturally distinguishes it from sibling tools which perform content operations like browsing, publishing, or deleting.
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 checking server connectivity, which is distinct from sibling tools' purposes. While no explicit when-to-use or when-not-to-use guidance is given, the context is clear enough for an agent to understand this is a diagnostic tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_collectionsA
Get all blogs/collections owned by the authenticated user.
Args:
access_token: Access token from login() or WRITEFREELY_ACCESS_TOKEN env var
(optional if token is set via env var)
Returns:
Formatted list of all user's collections with aliases, titles, and URLs
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that the operation is a read ('Get'), specifies return fields (aliases, titles, URLs), and mentions authentication options. However, it does not explicitly state non-destructive nature or any other behavioral traits like rate limits or pagination.
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 concise, front-loads the purpose, and uses clear sections for args and returns. It contains no unnecessary 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?
Given the tool's simplicity and existence of an output schema, the description covers key aspects (purpose, auth, return fields). However, it lacks guidance on when to use this tool versus siblings and does not mention pagination or limits for large collections.
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 add meaning. It explains that access_token can come from login() or the WRITEFREELY_ACCESS_TOKEN env var and is optional, which is valuable context beyond the schema's type and default.
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 'Get all blogs/collections owned by the authenticated user', using a specific verb and resource that distinguishes it from siblings like browse_collection (which likely targets a single collection) and browse_public_feed (public content).
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 the authenticated user's own collections but does not explicitly state when to use this tool versus alternatives like browse_collection or browse_public_feed. No exclusions or comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_postsA
Retrieve all posts for the authenticated user.
Args:
access_token: Access token from login() or WRITEFREELY_ACCESS_TOKEN env var
(optional if token is set via env var)
Returns:
Formatted list of all user's posts with IDs, titles, and URLs
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses return format (IDs, titles, URLs) but does not mention pagination, error handling, or authorization failure 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?
Description is well-structured with Args/Returns sections, front-loaded purpose. One sentence on purpose could be tighter but overall clear.
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?
Covers parameter and return format adequately. No nested objects, output schema exists. Could add ordering/filtering but sufficient for a list tool.
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?
Despite 0% schema coverage from description, the 'Args' block adds valuable context about access_token: its source (login() or env var) and optionality, going beyond the schema's minimal details.
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 specific verb 'Retrieve' and resource 'all posts for the authenticated user', clearly distinguishing it from public browsing tools like browse_public_feed and browse_collection.
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?
Description mentions authentication via access token from login() or env var, and notes optionality. It implies usage for retrieving own posts but lacks explicit comparison with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginA
Authenticate with WriteFreely and obtain an access token.
If WRITEFREELY_ACCESS_TOKEN environment variable is set, this tool will use
that token automatically without requiring username and password.
You can provide username and password to authenticate with a different
account, or use the environment variable for better security
(recommended for production).
Args:
username: Your WriteFreely username
(optional if WRITEFREELY_ACCESS_TOKEN is set)
password: Your WriteFreely password
(optional if WRITEFREELY_ACCESS_TOKEN is set)
Returns:
Success message with access token, or information about existing token
| Name | Required | Description | Default |
|---|---|---|---|
| username | No | ||
| password | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It discloses automatic token usage when env var is set, and mentions return value (success message with token or info about existing token). It doesn't detail error scenarios but covers key behaviors.
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 well-structured with paragraphs and Args/Returns sections. It is front-loaded with purpose. Could be slightly shorter, but every sentence adds value.
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 (2 optional params, output schema exists), the description covers purpose, authentication flow, and return type adequately. It is complete enough for a login tool.
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 coverage is 0% (no parameter descriptions), but the description explains both parameters: username and password are optional if env var is set. This adds meaningful context beyond the schema's defaults.
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 identifies the tool's purpose: 'Authenticate with WriteFreely and obtain an access token.' The verb 'authenticate' and resource 'WriteFreely' are specific, and it contrasts with sibling tools that focus on posts and collections.
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 explains when to use environment variable vs username/password, notes optionality, and gives security recommendations. It lacks explicit 'when not to use' but context with sibling tools makes it clear this is for authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_postA
Create and publish a new post on WriteFreely.
Supports anonymous posts or publishing to a specific collection/blog.
Args:
content: The main body of the post (Markdown supported)
title: Optional post title
access_token: Access token from login() or WRITEFREELY_ACCESS_TOKEN env var
Leave empty for anonymous publishing or to use env var token
collection: Optional blog/collection alias to publish into
(only works with access_token)
Returns:
Success message with post URL or error
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| title | No | ||
| access_token | No | ||
| collection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: supports anonymous posts, Markdown, collection parameter requires access_token, and returns post URL or error. Could add details about idempodency or rate limits.
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 concise, well-structured with Args list and Returns, every sentence adds value, no 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 description covers main usage, parameters, return value. Output schema exists, so return details are sufficient. Missing details like synchronous behavior or error handling specifics.
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%, but the description thoroughly explains each parameter: content supports Markdown, title optional, access_token from login() or env var, collection only with token. This adds significant meaning beyond schema.
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 creates and publishes a new post on WriteFreely, distinguishing anonymous posts from collection publishing. It is distinct from sibling tools like edit_post or read_post.
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 when to use the tool (to create/publish). It explains anonymous vs authenticated usage but does not explicitly contrast with siblings or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_postA
Retrieve the content of an existing post by its ID.
Args:
post_id: The ID of the post (or slug for public posts)
access_token: Optional - needed only for private/draft posts
Can also use WRITEFREELY_ACCESS_TOKEN env var
Returns:
Post title + body (or error message)
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | ||
| access_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses the return format (title + body or error) and optional auth token. It doesn't mention rate limits or error details beyond 'error message', but for a simple read it's sufficient.
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 structured with Args and Returns sections, uses clear language, and has no unnecessary words. Every sentence serves a 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?
Given the tool's simplicity (2 params, 1 required), the description covers input and output sufficiently. The return description matches the presence of an output schema, and the sibling context does not require more detail.
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 coverage is 0%, so the description provides all parameter meaning. It explains post_id supports ID or slug, and access_token is optional for private posts with env var alternative, adding significant value beyond the schema's type-only definitions.
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 retrieves post content by ID. The verb 'Retrieve' targets the specific resource 'post content', and it distinguishes from siblings like list_my_posts (listing) and delete_post (deletion).
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 explains when the access_token is needed (private/draft posts) and mentions an alternative env var. However, it does not explicitly state when not to use this tool or compare it to alternatives like browse_public_feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v0.1.2- First observed
browse_collection - First observed
browse_public_feed - First observed
delete_post - First observed
edit_post - First observed
hello_writefreely - First observed
list_my_collections - First observed
list_my_posts - First observed
login - First observed
publish_post - First observed
read_post
TDQS
Each tool has a distinct purpose: browsing collections, public feed, CRUD for posts, authentication, and listing user resources. No two tools have overlapping functionality that would confuse an agent.
All tool names follow a consistent verb_noun pattern using lowercase with underscores (e.g., delete_post, publish_post). The only exception is hello_writefreely, which is a test tool that stands apart from the core workflow.
With 10 tools covering authentication, post CRUD, collection browsing, and public feed, the count is well-scoped for a blogging platform. It is neither too few to be useful nor too many to manage.
The tool set provides complete CRUD for posts and basic collection listing. However, it lacks collection creation, deletion, or update operations, which are minor gaps in managing the full lifecycle of collections.
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
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Alog, an AI × Human blog platform. Enables AI agents to post logs, create and publish articles, search content, and interact socially on alog.world.19201MIT

Paragraph MCPofficial
AlicenseNot gradedqualityAmaintenanceMCP server that connects AI agents to your Paragraph publication, enabling post management, subscriber analytics, and search across posts and publications.651MIT- FlicenseAqualityBmaintenanceMCP server that gives AI agents full blog management over a Lontar headless blogging API, enabling listing, reading, drafting, publishing, updating, and deleting posts.8-
- FlicenseAqualityCmaintenanceMCP server for interacting with the Medium API. Allows AI agents to publish posts, manage publications, upload images, and parse RSS feeds to JSON.7-
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/laxmena/writefreely-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server