@ope-olatunji/presskit-mcp
v1.0.0
Published
MCP server that serves your product & founder press/listing assets as a single source of truth: fit-to-length copy for directory forms and applications, resolved logo/screenshot paths, and a voice linter.
Downloads
84
Maintainers
Readme
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
# or run on demand
npx @ope-olatunji/presskit-mcpConfigure
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 # optional; ./presskit.json is auto-detectedThe 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
| Tool | What it does |
|------|--------------|
| 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"] }), andpresskit_linton 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
