Note Post
STDIOMCP server for automated posting and draft saving to note.com using Playwright
MCP server for automated posting and draft saving to note.com using Playwright
The Universal MCP Server exposes tools for automated posting and draft saving to note.com. It reads Markdown files containing titles, body text, and tags, then publishes them to your note.com account using Playwright automation.
note-state.json authentication state file (obtained via npm run login)NOTE_POST_MCP_STATE_PATH in your environment (optional, defaults to ~/.note-state.json)git clone https://github.com/Go-555/note-post-mcp.git cd note-post-mcp npm install npm run build
npm run install-browser
This installs the Chromium browser required for automation.
Run the login script to authenticate with note.com:
npm run login
A browser window will open. Log in to note.com, then press Enter in the terminal. This creates a ~/.note-state.json file containing your authentication state. Store this file securely and reference it via NOTE_POST_MCP_STATE_PATH or pass it as a parameter.
npm install -g note-post-mcp
Use this one-liner (replace with your real values):
claude mcp add Note Post MCP -s user -e NOTE_POST_MCP_STATE_PATH="/path/to/note-state.json" -- npx @gonuts555/note-post-mcp@latest
To remove:
claude mcp remove Note Post MCP
Create .cursor/mcp.json in your client (do not commit it here):
{ "mcpServers": { "note-post-mcp": { "command": "npx", "args": ["@gonuts555/note-post-mcp@latest"], "env": { "NOTE_POST_MCP_STATE_PATH": "/path/to/note-state.json" }, "autoStart": true } } }
Install via URI or CLI:
code --add-mcp '{"name":"note-post-mcp","command":"npx","args":["@gonuts555/note-post-mcp@latest"],"env":{"NOTE_POST_MCP_STATE_PATH":"/path/to/note-state.json"}}'
Add to your Claude Desktop configuration file (claude_desktop_config.json):
{ "mcpServers": { "note-post-mcp": { "command": "npx", "args": ["@gonuts555/note-post-mcp@latest"], "env": { "NOTE_POST_MCP_STATE_PATH": "/path/to/note-state.json" } } } }
npx["@gonuts555/note-post-mcp@latest"]NOTE_POST_MCP_STATE_PATH=/path/to/note-state.jsonnpx@gonuts555/note-post-mcp@latestExample ~/.config/opencode/opencode.json:
{ "$schema": "https://opencode.ai/config.json", "mcp": { "note-post-mcp": { "type": "local", "command": ["npx", "@gonuts555/note-post-mcp@latest"], "enabled": true, "env": { "NOTE_POST_MCP_STATE_PATH": "/path/to/note-state.json" } } } }
Add a new MCP and paste the standard JSON config from above.
Add the following to your Windsurf MCP configuration:
{ "note-post-mcp": { "command": "npx", "args": ["@gonuts555/note-post-mcp@latest"], "env": { "NOTE_POST_MCP_STATE_PATH": "/path/to/note-state.json" } } }
Add the following to your Codex TOML configuration.
Example (Serena):
[mcp_servers.serena] command = "uvx" args = ["--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server", "--context", "codex"]
This server (minimal):
[mcp_servers.note-post-mcp] command = "npx" args = ["@gonuts555/note-post-mcp@latest"] # Optional environment variables: # NOTE_POST_MCP_STATE_PATH = "/path/to/note-state.json" # NOTE_POST_MCP_TIMEOUT = "180000" # MCP_NAME = "note-post-mcp"
NOTE_POST_MCP_STATE_PATH: Path to the note.com authentication state file (default: ~/.note-state.json)NOTE_POST_MCP_TIMEOUT: Timeout in milliseconds for browser operations (default: 180000)MCP_NAME: Server name override (default: note-post-mcp)Publishes an article to note.com from a Markdown file.
Inputs:
markdown_path (string, required): Path to the Markdown file containing title, body, and tagsthumbnail_path (string, optional): Path to the thumbnail image filestate_path (string, optional): Path to the note.com authentication state filescreenshot_dir (string, optional): Directory to save screenshotstimeout (number, optional): Timeout in millisecondsOutputs: JSON object with:
success (boolean): Whether the operation succeededurl (string): URL of the published articlescreenshot (string): Path to the screenshotmessage (string): Success messageSaves a draft article to note.com from a Markdown file.
Inputs:
markdown_path (string, required): Path to the Markdown file containing title, body, and tagsthumbnail_path (string, optional): Path to the thumbnail image filestate_path (string, optional): Path to the note.com authentication state filescreenshot_dir (string, optional): Directory to save screenshotstimeout (number, optional): Timeout in millisecondsOutputs: JSON object with:
success (boolean): Whether the operation succeededurl (string): URL of the draft editor pagescreenshot (string): Path to the screenshotmessage (string): Success messageYour Markdown file should follow this format:
--- title: Your Article Title tags: - tag1 - tag2 --- Your article body content goes here. You can include URLs and they will be automatically expanded by note.com.
Alternatively, you can use array notation for tags:
--- title: Your Article Title tags: [tag1, tag2] --- Your article body content goes here.
Or use a simple # heading for the title if no front matter is present:
# Your Article Title Your article body content goes here.
The body content supports the following Markdown elements:
Front Matter Format:
--- of the front matter are treated as body contentHeading Format:
#  is treated as the title (not included in the body)##  or ###  are treated as part of the body contentCode Blocks:
Image Insertion:
Lists and Quotes:
-) and numbered lists (1.) are automatically continued by note.com>) are also automatically continuedHorizontal Rules:
--- in the body content is correctly processed as a horizontal ruleURL Single Lines:
{ "name": "publish_note", "arguments": { "markdown_path": "/path/to/article.md", "thumbnail_path": "/path/to/thumbnail.png", "state_path": "/path/to/note-state.json" } }
For saving a draft:
{ "name": "save_draft", "arguments": { "markdown_path": "/path/to/draft.md" } }
note-state.json file is valid and up-to-date. You may need to regenerate it if your session has expired.node -v to verify your Node.js version.npm install and npm run build to ensure all dependencies are installed and TypeScript is compiled.npx note-post-mcp (it will wait for MCP messages on stdin).npm pack --dry-run to see what files will be included in the published package.NOTE_POST_MCP_TIMEOUT or pass a larger timeout parameter.npm run install-browser or npx playwright install chromium to install the required browser.note-post-mcp) for identifiers and keys.Note Post MCP) only for UI labels.note-post-mcpnote-post-mcpnote-post-mcpnote-post-mcpnote-post-mcpNote Post MCPnote-post-mcp..mcp.json or client registries only use note-post-mcp for keys..cursor/mcp.json."mcpServers": { "note-post-mcp": { "command": "npx", "args": ["@gonuts555/note-post-mcp@latest"] } }"NotePost" or "note_post" (will conflict with note-post-mcp)MIT