presskit-mcp
An MCP server that serves your product and founder press / listing assets as a single source of truth, so an agent filling out a directory submission, a launch listing, or a YC-style application never has to make you re-paste the same copy again.
It came out of a very real afternoon of submitting one product to a dozen directories. The same three things hurt every time:
- Length limits. Product Hunt wants 60 characters, YC wants 50, SaaSHub allows 250, BetaList rejects anything "too long." You end up hand-trimming the same tagline over and over.
- Hunting for assets. Every form wants the logo and a few screenshots, and you go digging for the file paths each time.
- Voice drift. You have rules ("no emoji", "no em dashes because they look AI-written") and they quietly get violated under time pressure.
presskit-mcp fixes all three. You describe your product and founder once in a presskit.json, and the server exposes tools that return copy that fits a given limit, absolute asset paths ready to upload, and a linter that checks a draft against your voice rules.
Install
npm install -g @ope-olatunji/presskit-mcp
npx @ope-olatunji/presskit-mcp
Configure
Copy the example and edit it, then point the server at it:
cp node_modules/@ope-olatunji/presskit-mcp/presskit.example.json ./presskit.json
export PRESSKIT_CONFIG=./presskit.json
The kit resolution order is: PRESSKIT_CONFIG → ./presskit.json → the bundled presskit.example.json (so it always boots). Asset paths in the file resolve relative to the file's own directory.
Only product.name is required. See presskit.example.json for the full schema: taglines (any number, any length), named description variants, one-liner, categories, pricing, socials, video, assets.logo / assets.screenshots, a full founder block (bio, projects, work history, reusable story answers), and a voice block (rules, avoid substrings, no_emoji).
Add it to an MCP client
Claude Code / Claude Desktop (mcpServers config):
{
"mcpServers": {
"presskit": {
"command": "npx",
"args": ["-y", "@ope-olatunji/presskit-mcp"],
"env": { "PRESSKIT_CONFIG": "/absolute/path/to/presskit.json" }
}
}
}
Tools
presskit_overview | What the kit contains: copy kinds and their lengths, founder sections, asset counts, voice rules. Call it first. |
presskit_copy | The main one. kind = tagline | description | one_liner, plus optional max_chars / max_words. Returns the longest variant that fits, or a clean boundary-aware trim if none do, with { text, length, words, fits }. |
presskit_product | Structured product facts (name, url, categories, pricing, socials, video, all copy). Optional fields to narrow. |
presskit_founder | Founder facts for "about the team" / application fields. Optional section. |
presskit_assets | Absolute, ready-to-upload paths for the logo and screenshots, plus the video URL. No more hunting for files. |
presskit_lint | Check a draft against your voice rules before you submit. Flags forbidden substrings (e.g. an em dash) and emoji. |
Example
"Submit this product to Product Hunt." → the agent calls presskit_copy({ kind: "tagline", max_chars: 60 }), presskit_assets({ kind: "logo" }), presskit_product({ fields: ["categories", "socials"] }), and presskit_lint on the final blurb — no copy-paste from you.
Integrating OpenCrater
This is a real, publishable MCP package, which makes it a natural place to add an earning integration: drop in the OpenCrater SDK so the package earns for its maintainer while it's used, then register it on OpenCrater. See opencrater.to.
License
MIT