Skip to main content
Glama
laxmena

writefreely-mcp-server

by laxmena

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 | sh

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Using Homebrew (macOS):

brew install uv

Using pip:

pip install uv

After 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-mcp

Using uv

uv tool install writefreely-mcp-server
writefreely-mcp

Using pip

pip install writefreely-mcp-server

Configuration

Configure via environment variables:

  • WRITEFREELY_BASE_URL - Base URL (default: https://write.as)

  • WRITEFREELY_ACCESS_TOKEN - Access token for authentication

  • WRITEFREELY_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/password

  • publish_post() - Create and publish a new post

  • edit_post() - Update an existing post

  • delete_post() - Delete a post

  • read_post() - Read a post by ID

  • list_my_posts() - List all your posts

  • list_my_collections() - List all your collections/blogs

  • browse_collection() - Browse posts in a collection

  • browse_public_feed() - Browse the public feed

License

MIT

Available Tools

10 tools
browse_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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
collection_aliasYes
pageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
skipNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes
access_tokenNo
edit_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes
contentYes
titleNo
access_tokenNo
edit_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
access_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
access_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
usernameNo
passwordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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
    
ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
titleNo
access_tokenNo
collectionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)
    
ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes
access_tokenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updatesv0.1.2
    • First observedbrowse_collection
    • First observedbrowse_public_feed
    • First observeddelete_post
    • First observededit_post
    • First observedhello_writefreely
    • First observedlist_my_collections
    • First observedlist_my_posts
    • First observedlogin
    • First observedpublish_post
    • First observedread_post

TDQS

A4.2/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

Latest Blog Posts

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