writefreely-mcp-server
Allows publishing and managing posts and collections on Write.as (and self-hosted WriteFreely instances).
Click on "Deploy 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-server publish 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
Inputs: collection_alias (required), page. Returns: result
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
Inputs: skip. Returns: result
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
Inputs: post_id (required), access_token, edit_token. Returns: result
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
Inputs: post_id (required), content (required), title, access_token, +1 more. Returns: result
hello_writefreelyA
Simple test tool - confirms the WriteFreely MCP server is running.
Inputs: no named parameters. Returns: result
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
Inputs: access_token. Returns: result
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
Inputs: access_token. Returns: result
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
Inputs: username, password. Returns: result
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
Inputs: content (required), title, access_token, collection. Returns: result
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)
Inputs: post_id (required), access_token. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
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
Related MCP Connectors
Blog MCP server for AI agents. One signup call returns a blog, an API key and a live URL; then your agent publishes markdown posts and gets public URLs back. Your agent does the writing; you get a dashboard for stats.
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Hosted MCP server for AI agents to post to LinkedIn profiles and X and upload to YouTube.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
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.1921 npm1MIT

Paragraph MCPofficial
AlicenseNot gradedqualityFmaintenanceMCP server that connects AI agents to your Paragraph publication, enabling post management, subscriber analytics, and search across posts and publications.181 npm1MIT- AlicenseAqualityFmaintenanceMCP server that gives AI agents full blog management over a Lontar headless blogging API, enabling listing, reading, drafting, publishing, updating, and deleting posts.8MIT
- FlicenseAqualityDmaintenanceMCP server for interacting with the Medium API. Allows AI agents to publish posts, manage publications, upload images, and parse RSS feeds to JSON.7-