hashnode-mcp-server
Allows managing a Hashnode blog, including creating drafts, publishing posts, listing and updating posts, and managing publications via the Hashnode GraphQL API.
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., "@hashnode-mcp-serverCreate a draft about cloud security best practices"
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.
@kieksme/mcp-hashnode
MCP server for the Hashnode GraphQL API.
Create drafts, publish posts, manage your blog — all via Claude.
Hashnode Pro plan required.
Since May 2026, Hashnode's GraphQL API is only available to publications on a Pro plan.
Free accounts will receive an error. Upgrade at hashnode.com/settings/billing.
Tools
Tool | Description |
| Get your profile and publication IDs |
| Get publication info by host |
| List published posts |
| Get a single post by slug |
| Create a draft |
| Update an existing draft |
| List drafts in a publication |
| Publish a draft → live post |
| Publish directly (no draft step) |
| Update a published post |
| Delete a post ⚠️ |
Related MCP server: mcp-blog
Setup
1. Get your Personal Access Token
Go to hashnode.com/settings/developer and click Generate new token.
2. Install
Via npx (no install needed — recommended):
npx -y @kieksme/mcp-hashnodeVia global install:
pnpm add -g @kieksme/mcp-hashnodeBuild from source:
git clone https://github.com/kieksme/mcp-hashnode.git
cd mcp-hashnode
pnpm install && pnpm run build3. Configure your MCP client
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"hashnode": {
"command": "npx",
"args": ["-y", "@kieksme/mcp-hashnode"],
"env": {
"HASHNODE_TOKEN": "your-token-here"
}
}
}
}Claude Code (CLI)
claude mcp add hashnode \
--command npx \
--args "-y @kieksme/mcp-hashnode" \
--env HASHNODE_TOKEN=your-token-hereCursor
Add to .cursor/mcp.json in your project root, or to ~/.cursor/mcp.json globally:
{
"mcpServers": {
"hashnode": {
"command": "npx",
"args": ["-y", "@kieksme/mcp-hashnode"],
"env": {
"HASHNODE_TOKEN": "your-token-here"
}
}
}
}VS Code (GitHub Copilot)
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"hashnode": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@kieksme/mcp-hashnode"],
"env": {
"HASHNODE_TOKEN": "your-token-here"
}
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"hashnode": {
"command": "npx",
"args": ["-y", "@kieksme/mcp-hashnode"],
"env": {
"HASHNODE_TOKEN": "your-token-here"
}
}
}
}Usage examples
"What's my publication ID?"
→ hashnode_get_me
"Create a draft called 'Cloud Security Best Practices' with this content: ..."
→ hashnode_create_draft
"Publish the draft with ID xyz"
→ hashnode_publish_draft
"List my last 10 posts on thinkport.hashnode.dev"
→ hashnode_list_postsAuthentication
Hashnode requires Authorization: <token> (no Bearer prefix).
All mutations need the token; most read queries are public.
Rate limits
Queries: 20,000 req/min
Mutations: 500 req/min
Tags format
Tags must be objects — not plain strings:
[
{ "name": "Cloud Computing", "slug": "cloud-computing" },
{ "name": "DevOps", "slug": "devops" }
]Releases
This project uses release-please for automated releases.
Commits to
mainthat follow Conventional Commits (feat:,fix:,chore:etc.) are tracked automatically.All supported Conventional Commit categories (
feat,fix,perf,revert,docs,style,chore,refactor,test,build,ci) are included for release-please changelog generation and Release PR updates.release-please opens a Release PR that bumps the version and updates
CHANGELOG.md.Merging the Release PR creates a GitHub Release and triggers an automated npm publish.
Required secret
Add NPM_TOKEN to the repository secrets (Settings → Secrets → Actions):
Generate at npmjs.com/settings/tokens — choose Automation type.
License
MIT
Available Tools
11 toolshashnode_create_draftCreate a Hashnode draftA
Create a new draft in a Hashnode publication. Does NOT publish — use hashnode_publish_draft afterwards.
Args:
publication_id (string, required): Publication ID
title (string, required): Post title
content_markdown (string, required): Post content in Markdown
subtitle (string, optional): Short subtitle
tags (array, optional): Tags as [{ name, slug }] — slug must be lowercase with hyphens
cover_image_url (string, optional): URL of cover image
slug (string, optional): Custom URL slug (auto-generated from title if omitted)
original_article_url (string, optional): Canonical URL for cross-posted articles
meta_title (string, optional): SEO meta title
meta_description (string, optional): SEO meta description
response_format: 'markdown' or 'json'
Returns: draft id, title, slug, tags, updatedAt
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Custom URL slug (auto-generated if omitted) | |
| tags | No | Tags as [{ name: 'Cloud Computing', slug: 'cloud-computing' }] | |
| title | Yes | Post title | |
| subtitle | No | Short subtitle | |
| meta_title | No | SEO meta title | |
| publication_id | Yes | Publication ID | |
| cover_image_url | No | URL of cover image | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
| content_markdown | Yes | Post content in Markdown | |
| meta_description | No | SEO meta description | |
| original_article_url | No | Canonical URL for cross-posted content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-idempotent behavior. The description adds the important nuance that this tool only creates a draft and does not publish, plus it lists the return fields. 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 opening sentences are concise and front-loaded with crucial workflow info. However, the exhaustive Args list duplicates schema descriptions, adding length without new information. It could be trimmed to just the non-obvious notes.
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?
With no output schema, the description compensates by listing return fields (draft id, title, slug, tags, updatedAt). Combined with the 100% schema coverage and annotations, the tool is well-specified for correct invocation. Minor gaps like error handling are not critical.
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?
Input schema covers 100% of parameters with descriptions. The Args list in the description largely repeats schema information, adding only minor clarifications like 'slug must be lowercase with hyphens' which is already in 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?
The description clearly states it creates a new draft in a Hashnode publication, using a specific verb and resource. It also distinguishes itself from the sibling tool hashnode_publish_draft by explicitly noting it does not publish.
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 explicitly says 'Does NOT publish — use hashnode_publish_draft afterwards.' This provides clear when-to-use guidance and names the alternative, fulfilling the behavioral exclusion requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_delete_postDelete a published Hashnode postADestructive
Permanently delete a published post. This action cannot be undone.
Args:
post_id (string, required): Post ID to delete
response_format: 'markdown' or 'json'
⚠️ WARNING: This permanently deletes the post.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post ID to permanently delete | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint=true, but the description adds crucial context: 'permanently delete', 'cannot be undone', and a warning. This goes beyond the structured data, clearly disclosing the irreversible destructive nature. It does not mention authentication or other behaviors, but for a simple delete tool this is 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 concise and front-loaded with the essential action and warning. The Args list and warning are clearly structured, and every sentence contributes to understanding the tool's purpose and risks. No waste.
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 nature of the delete operation and the fact that the input schema fully documents parameters, the description is complete. It covers the action, irreversibility, required param, and optional response_format. No output schema is needed for a tool with such straightforward behavior.
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 100%, so the schema already fully documents both parameters. The description lists the parameters but adds no new meaning beyond what the schema provides. Baseline score of 3 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 specific verb 'delete' and the resource 'published post', distinguishing it from sibling tools like update or get. The permanent nature is emphasized, clarifying the exact scope of the operation.
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 this tool: to permanently delete a published post. However, it does not explicitly address when not to use it or mention alternative tools for deletion vs. updating/drafting. The warning about irreversibility adds important contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_get_meGet current Hashnode user and their publicationsARead-onlyIdempotent
Returns the authenticated user's profile and a list of their publications. Use this first to discover your publicationId(s) before creating or listing posts.
Returns:
id, name, username, profilePicture
publications[]: { id, title, url }
Examples:
"What is my publication ID?" → call hashnode_get_me
"List my Hashnode blogs" → call hashnode_get_me
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the response structure (fields and publications array), which is helpful, but it doesn't disclose potential failure modes (e.g., unauthenticated requests) or pagination. Given strong annotations, this is acceptable but not exceptional.
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 succinct and well-structured: a one-sentence core purpose, a bulleted list of returns, and two concrete examples. Every sentence earns its place, and the most important usage guidance 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?
For a simple read-only tool with no output schema and one optional parameter, the description is complete enough. It explains what the tool returns and when to use it, but it omits edge cases like empty publications or authentication errors. These are minor for such a straightforward tool, so a slight deduction is appropriate.
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 100% for the single parameter (response_format), with the schema already providing its description and enum. The tool description adds no further parameter details, so it stays at the baseline 3 without needing to compensate.
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 'Returns the authenticated user's profile and a list of their publications', using a specific verb and resource. It also distinguishes itself from sibling tools by noting 'Use this first to discover your publicationId(s) before creating or listing 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 explicitly says 'Use this first to discover your publicationId(s) before creating or listing posts', providing clear when-to-use context. Examples such as 'What is my publication ID?' and 'List my Hashnode blogs' further illustrate appropriate use cases, making it easy to select this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_get_postGet a single Hashnode post by slugARead-onlyIdempotent
Fetch full details of a published post by its slug.
Args:
host (string, required): Publication host
slug (string, required): Post slug from the URL, e.g. "my-first-post"
response_format: 'markdown' or 'json'
Returns: full post data including content brief, views, tags, cover image, author
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Publication host | |
| slug | Yes | Post slug from URL | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds value by specifying the response includes content brief, views, tags, cover image, and author, and it mentions the response_format option. However, it does not disclose any additional behavioral traits like rate limits or error cases, so a 3 is appropriate.
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 compact, separated into Args and Returns sections, and clearly front-loads the main purpose. It avoids unnecessary fluff, though the Args list slightly duplicates schema info. The format is easy to scan.
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 (3 params, no output schema), the description is sufficiently complete: it states the purpose, lists required and optional parameters, and describes the return content. It does not mention authentication or error scenarios, but annotations cover safety and read-only behavior, so no major gaps remain.
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 100% coverage, describing all three parameters (host, slug, response_format) with types and constraints. The description adds a concrete example for slug ('my-first-post') and restates the response_format options, but does not provide significant new meaning beyond the schema. Baseline 3 is fitting.
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 fetches full details of a single published post by slug, with a specific verb (fetch) and resource (published post). This distinguishes it from siblings like hashnode_list_posts (which lists posts) and hashnode_get_publication (which gets publication info).
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 when a specific post slug is known and full details are needed, contrasting with list_posts for summaries. It does not explicitly name alternatives or state when not to use, but the context is clear from the phrase 'single post by slug' and the listed return fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_get_publicationGet Hashnode publication by hostARead-onlyIdempotent
Fetch metadata for a Hashnode publication by its host/domain.
Args:
host (string): Publication host, e.g. "yourblog.hashnode.dev" or a custom domain
response_format: 'markdown' or 'json'
Returns: id, title, url, about, author info
Examples:
host: "thinkport.hashnode.dev"
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Publication host, e.g. 'yourblog.hashnode.dev' or a custom domain | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the tool's safety is known. The description adds transparency by listing the returned fields (id, title, url, about, author info) and noting the configurable response_format, which helps set expectations 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?
The description is compact and well-structured with clear sections for args, returns, and examples. Every sentence adds useful information without unnecessary fluff, and the main purpose 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?
For a simple read-only tool with two parameters and full schema coverage, the description provides enough detail: it states purpose, parameters, return fields, and an example. The absence of an output schema is compensated by the explicit return list, making the description complete for an agent to invoke successfully.
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 100%, so the baseline is 3. The description repeats parameter explanations and adds an example host value, providing marginal value beyond the schema but not significantly enriching parameter semantics.
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 'Fetch metadata for a Hashnode publication by its host/domain', using a specific verb and resource. It distinguishes this tool from sibling tools like get_me or get_post by emphasizing publication-level metadata and host/domain identification.
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 on when to use the tool (to fetch publication metadata by host/domain) and includes a concrete example. It does not explicitly mention alternatives or exclusions, but the usage intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_list_draftsList Hashnode draftsARead-onlyIdempotent
List drafts in a Hashnode publication.
Args:
publication_id (string): The publication ID (from hashnode_get_me)
limit (number): Number of drafts to return (default 20, max 50)
after (string): Pagination cursor from a previous call
response_format: 'markdown' or 'json'
Returns: list of drafts with id, title, subtitle, tags, updated date
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor from previous response | |
| limit | No | Number of drafts to return | |
| publication_id | Yes | Publication ID (from hashnode_get_me) | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds useful behavioral details such as pagination via 'after', response formats, and the returned field list, going beyond what annotations provide 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?
The description is concise and well-structured: a short intro, bulleted arguments, and a return specification. Every sentence carries useful information with no redundancy or fluff.
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 read-only list operation, the description covers the required argument, optional pagination, and return fields. It does not provide an example or detail error scenarios, but for a low-risk read-only tool with annotations, the level of detail 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?
Schema description coverage is 100%, so the baseline is 3. The description repeats parameter details already present in the schema (e.g., default limit, pagination cursor) and adds minimal new semantics like 'from hashnode_get_me' and 'max 50', which are already in the schema properties.
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 'List drafts in a Hashnode publication' with a specific verb and resource. It is distinct from sibling tools like hashnode_list_posts and hashnode_publish_draft, leaving no ambiguity about its function.
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 context that publication_id comes from hashnode_get_me, suggesting a workflow. However, it does not explicitly mention when to use this over hashnode_list_posts or other alternatives, so guidance is implied rather than stated directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_list_postsList published posts in a Hashnode publicationARead-onlyIdempotent
List published blog posts in a publication, ordered by publish date (newest first).
Args:
host (string, required): Publication host, e.g. "yourblog.hashnode.dev"
limit (number): Posts per page (default 20, max 50)
after (string): Cursor for pagination
response_format: 'markdown' or 'json'
Returns: posts with id, title, slug, url, publishedAt, views, readTime, tags
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Publication host, e.g. 'yourblog.hashnode.dev' | |
| after | No | Pagination cursor from previous response | |
| limit | No | Posts per page | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds value by specifying the return fields (id, title, slug, url, publishedAt, views, readTime, tags), the default ordering, and pagination cursor behavior. This enriches the agent's understanding beyond the annotations without contradiction.
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 and well-structured: it opens with a clear summary sentence, then lists parameters in an Args block and concludes with a Returns line. Every element earns its place, with no redundancy or fluff.
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, the presence of a complete schema, and rich annotations, the description is sufficient. It covers the key contextual aspects: ordering, pagination via the 'after' cursor, allowed response formats, and the returned fields. There is no output schema, but the Returns line fills that gap. No additional information seems 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 input schema already provides full descriptions for all four parameters (host, after, limit, response_format) with defaults and constraints. The description largely repeats this information (e.g., limit default 20 max 50, after as cursor). It does not introduce new semantic details beyond what the schema covers, so the baseline score of 3 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 uses a specific verb ('List'), names the resource ('published blog posts'), and adds scoping details ('in a publication', 'ordered by publish date (newest first)'). It clearly distinguishes from sibling tools like hashnode_list_drafts by explicitly stating 'published'.
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 gives a clear context for when to use this tool (listing published posts) and mentions ordering/pagination. It does not explicitly name alternatives or exclusions, but the sibling tool names (e.g., list_drafts) imply the distinction. This matches 'clear context, no exclusions'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_publish_draftPublish a Hashnode draftA
Publish an existing draft, making it a live blog post.
Args:
draft_id (string, required): Draft ID to publish (from hashnode_create_draft or hashnode_list_drafts)
response_format: 'markdown' or 'json'
Returns: post id, title, slug, url, publishedAt, tags
Examples:
Create draft → publish: hashnode_create_draft → hashnode_publish_draft
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | Draft ID to publish | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds that the draft becomes a live post and lists return fields, but does not disclose side effects like the draft being consumed. This is adequate given the annotation coverage.
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 and well-structured: a one-sentence summary, an args section, a returns section, and an example. Every part serves a purpose with no redundant content.
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 tool with 2 parameters, annotations, and a return list, the description is complete. It covers the action, parameter sourcing, output format, and return value, along with a helpful example.
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 already describes both parameters with 100% coverage. The description adds value by specifying that draft_id should be obtained from hashnode_create_draft or hashnode_list_drafts, which is helpful 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?
The description clearly states 'Publish an existing draft, making it a live blog post', specifying the action and result. It also distinguishes itself from sibling tools like create_draft or publish_post by focusing on the draft-to-post transition.
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 by indicating that draft_id comes from hashnode_create_draft or hashnode_list_drafts, and shows a typical workflow. It does not explicitly mention alternatives or exclusions, but the example clarifies the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_publish_postPublish a post directly to Hashnode (no draft step)A
Publish a new blog post directly without creating a draft first. Prefer hashnode_create_draft + hashnode_publish_draft for a safer workflow.
Args:
publication_id (string, required): Publication ID (from hashnode_get_me)
title (string, required): Post title
content_markdown (string, required): Post content in Markdown
subtitle (string, optional): Short subtitle
tags (array, optional): [{ name, slug }] — max 5 tags
cover_image_url (string, optional): URL of cover image
slug (string, optional): Custom URL slug
original_article_url (string, optional): Canonical URL for cross-posts
meta_title (string, optional): SEO title
meta_description (string, optional): SEO description
scheduled_at (string, optional): ISO 8601 datetime for scheduled publishing
response_format: 'markdown' or 'json'
Returns: post id, title, slug, url, publishedAt, tags
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Custom URL slug | |
| tags | No | Tags as [{ name: 'Cloud Computing', slug: 'cloud-computing' }] | |
| title | Yes | Post title | |
| subtitle | No | Short subtitle | |
| meta_title | No | SEO meta title | |
| scheduled_at | No | ISO 8601 datetime for scheduled publishing, e.g. '2025-12-31T10:00:00Z' | |
| publication_id | Yes | Publication ID | |
| cover_image_url | No | URL of cover image | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
| content_markdown | Yes | Post content in Markdown | |
| meta_description | No | SEO meta description | |
| original_article_url | No | Canonical URL for cross-posted content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-idempotent operation. The description adds context that the publication happens directly without a draft step, emphasizing immediacy and the lack of a review buffer. It also lists the returned fields, which is helpful behavioral output information.
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 front-loaded with purpose and workflow guidance, followed by a structured parameter list and return values. It is somewhat long due to 12 parameters, but every section is purposeful and there is no filler. The format is easy to scan.
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 complex publishing tool with 12 parameters and no output schema, the description covers the essential context: what it does, when to use an alternative, all parameters, and the return structure. It is complete enough for an agent to select and invoke the tool correctly without needing additional external 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?
The input schema already covers all 12 parameters with detailed descriptions (100% coverage). The description adds a useful cross-reference for publication_id ('from hashnode_get_me') and restates the parameters in a compact list, making the tool self-contained. This goes slightly beyond the schema but is not a major extension.
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: 'Publish a new blog post directly' and explicitly distinguishes itself from the draft workflow by stating 'without creating a draft first.' It is clearly differentiated from sibling tools like hashnode_create_draft and hashnode_publish_draft.
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 explicitly recommends an alternative workflow: 'Prefer hashnode_create_draft + hashnode_publish_draft for a safer workflow.' This tells the agent when not to use the tool and names the safer alternative, making the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_update_draftUpdate an existing Hashnode draftA
Update fields of an existing draft. Only provided fields are changed.
Args:
draft_id (string, required): Draft ID to update
title (string, optional): New title
content_markdown (string, optional): New content in Markdown
subtitle (string, optional): New subtitle
tags (array, optional): New tags as [{ name, slug }]
cover_image_url (string, optional): New cover image URL
response_format: 'markdown' or 'json'
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | New tags as [{ name, slug }] | |
| title | No | New title | |
| draft_id | Yes | Draft ID to update | |
| subtitle | No | New subtitle | |
| cover_image_url | No | New cover image URL | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
| content_markdown | No | New content in Markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the mutation behavior is known. The description adds the key behavioral nuance that only provided fields are changed, which is important for partial updates. It does not mention auth requirements or rate limits, but with annotations present, this is acceptable.
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 front-loaded with a meaningful sentence, but the subsequent 'Args:' list redundantly repeats parameter information already present in the input schema. This adds bloat without new information. It is readable, but not every sentence 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 7-parameter mutation tool with 100% schema coverage and annotations, the description covers the essential partial-update behavior and output format options. It does not describe the return value or potential errors, but no output schema exists and the tool's purpose is straightforward. Overall, it is sufficiently complete for an agent to use 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 100%, so the input schema fully documents each parameter. The description duplicates the parameter list without adding new per-parameter semantic detail. However, the introductory sentence clarifies the partial-update semantics of optional parameters, which adds 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?
The description clearly states 'Update fields of an existing draft' with a specific verb and resource, and the title reinforces this. It distinguishes itself from siblings like create_draft and publish_draft by focusing on modifying an existing draft. The phrase 'Only provided fields are changed' adds valuable scope clarification.
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 modifying an existing draft versus creating or publishing one. It does not explicitly name alternatives like hashnode_create_draft or hashnode_update_post, but the 'existing draft' context is unambiguous. It lacks explicit exclusions or fallback guidance, but the intended use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashnode_update_postUpdate a published Hashnode postA
Update fields of an already-published post. Only provided fields are changed.
Args:
post_id (string, required): Post ID (from hashnode_list_posts or hashnode_get_post)
title (string, optional): New title
content_markdown (string, optional): New content in Markdown
subtitle (string, optional): New subtitle
tags (array, optional): New tags [{ name, slug }]
cover_image_url (string, optional): New cover image URL
response_format: 'markdown' or 'json'
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | New tags [{ name, slug }] | |
| title | No | New title | |
| post_id | Yes | Post ID to update | |
| subtitle | No | New subtitle | |
| cover_image_url | No | New cover image URL | |
| response_format | No | Output format: 'markdown' (default) or 'json' | markdown |
| content_markdown | No | New content in Markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context with 'Only provided fields are changed', clarifying that unspecified fields remain untouched, which is valuable beyond the annotations. It complements the readOnlyHint=false and destructiveHint=false by indicating partial-update semantics without contradiction.
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 a clear first sentence and a formatted Args list. However, the Args section duplicates schema information, making it longer than necessary. The 'Only provided fields are changed' note adds value, and the overall structure remains easy to scan.
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 has no output schema, and the description does not explicitly state what the operation returns (e.g., updated post object or success message). While the 'response_format' parameter hints at output format, it lacks clarity on the return value. The description covers input parameters well but leaves the response ambiguous.
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 100%, and the description's Args section largely reiterates the schema without adding new semantic meaning (e.g., no examples, no constraints on tag slugs). It provides a minimal convenience by referencing where to obtain post_id, but does not exceed the baseline for fully documented schemas.
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 ('Update') and a clearly defined resource ('fields of an already-published post'), distinguishing it from sibling tools like hashnode_update_draft which target drafts. The phrase 'already-published' is crucial for disambiguation.
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 clearly states the tool operates on already-published posts, which guides the agent on when to use it versus draft-focused siblings. However, it does not explicitly name alternatives or provide exclusion conditions beyond this scope.
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.
11 tool updates
v1.1.1- First observed
hashnode_create_draft - First observed
hashnode_delete_post - First observed
hashnode_get_me - First observed
hashnode_get_post - First observed
hashnode_get_publication - First observed
hashnode_list_drafts - First observed
hashnode_list_posts - First observed
hashnode_publish_draft - First observed
hashnode_publish_post - First observed
hashnode_update_draft - First observed
hashnode_update_post
TDQS
Scored across 11 tools
Each tool targets a distinct resource and action: user, publication, drafts, and posts each have their own verbs (get/list/create/update/publish/delete). The overlap between publish_post and create_draft+publish_draft is explicitly disambiguated, making tool selection clear.
All tools follow the consistent pattern 'hashnode_<verb>_<resource>' in snake_case (e.g., get_me, list_drafts, update_post). There are no mixed conventions or vague names.
11 tools is well-scoped for a blog platform, covering user info, publication lookup, draft management (list/create/update/publish), and post management (list/get/publish/update/delete). Each tool earns its place without bloat.
The core blogging workflow is covered, including draft creation, updating, publishing, and post lifecycle. Minor gaps exist: there is no delete_draft or unpublish post operation, which agents might need for full lifecycle management.
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
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to programmatically interact with the Hashnode API for creating, updating, searching, and retrieving blog content.7MIT
- FlicenseAqualityDmaintenanceMCP server for blog admin API enabling preview, publish, list, and delete blog posts from Claude Code via stdio transport.5-
- AlicenseAqualityDmaintenanceMCP server for Substack that lets Claude Code create drafts, upload images, set cover thumbnails, schedule, and publish posts on your Substack publication.1115MIT
- AlicenseAqualityAmaintenanceA generic MCP (Model Context Protocol) server that bridges any GraphQL API to Claude Code. It introspects your GraphQL schema and exposes each query and mutation as an individual tool, letting Claude interact with your API directly.2481MIT