Metadata-Version: 2.5
Name: profile-wrap-mcp
Version: 0.2.1
Summary: MCP server (stdio) for Profile-Wrap: workspace status, drafts, gate, facts, review state, and posting of board-Allowed drafts only. Not affiliated with LinkedIn.
Project-URL: Homepage, https://github.com/NJ-Burrito/profile-wrap
Project-URL: Documentation, https://github.com/NJ-Burrito/profile-wrap/blob/main/docs/MCP.md
Project-URL: Issues, https://github.com/NJ-Burrito/profile-wrap/issues
Author: profile-wrap contributors
License: MIT
Keywords: bilingual,content,mcp,model-context-protocol,official-api,profile-wrap
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Requires-Dist: mcp<3,>=2.3
Requires-Dist: profile-wrap<0.3,>=0.2.0
Description-Content-Type: text/markdown

# profile-wrap-mcp

<!-- mcp-name: io.github.NJ-Burrito/profile-wrap-mcp -->
mcp-name: io.github.NJ-Burrito/profile-wrap-mcp

A stdio [MCP](https://modelcontextprotocol.io) server for a [Profile-Wrap](https://github.com/NJ-Burrito/profile-wrap) workspace.
It lets an MCP client (Claude Code, Codex, any other) check the workspace, draft a post from a topic, run the
fact gate, manage unverified facts and read the review board. It can also post, but **only a draft a person
already pressed Allow on, on the review board**.

Independent, open source (MIT). **Not affiliated with LinkedIn.** The server talks to LinkedIn only through the
official API with your own developer app, and only inside `post_allowed`.

## Tools

| Tool | What it does | Writes |
|---|---|---|
| `workspace_status` | posting mode, pauses and stops, 20 h gap, token state, draft counts, posts today | nothing |
| `calendar_list` | content-calendar entries, optional status filter | nothing |
| `draft_create` | new text draft from a topic with your chosen provider; verified facts only; state `draft` | `drafts/<slug>/` |
| `gate_run` | the deterministic gate on a draft (numbers, claims, language, banned patterns) | `gates.json` |
| `facts_list` | the fact register with each fact's status | nothing |
| `facts_add` | adds a fact as **unverified**; a person verifies it in a terminal | `research/facts.md` |
| `review_state` | review-board state of one draft or all, and whether it was Allowed | nothing |
| `post_allowed` | posts one board-Allowed draft; `confirm=false` (default) is a dry run | ledger, draft status |

Resources: `pw://calendar`, `pw://drafts`, `pw://drafts/{slug}`.

## Safety

- `post_allowed` refuses every state except `allowed` (draft, revising, hold, rejected, needs_check, missed, posted, demo),
  and refuses an `allowed` status that has no board Allow as the latest entry in the review history.
- It calls `profile_wrap.linkedin.post.publish`, the same function as `profile-wrap post --now`: gate PASS, 20 h gap,
  one post a day, posting lock, 429/403 stop, pauses, and the ledger row written before anything is sent.
- No tool reads direct messages, sends connection invitations, comments, likes or verifies a fact.
- No key or token is ever returned. `draft_create` sends the topic and your verified facts to the provider you chose.

## Install

```bash
uvx profile-wrap-mcp --workspace /path/to/your/workspace
claude mcp add profile-wrap -- uvx profile-wrap-mcp --workspace /path/to/your/workspace
```

Without `--workspace` the server uses `PROFILE_WRAP_WORKSPACE`, then the usual Profile-Wrap lookup.
More: [docs/MCP.md](https://github.com/NJ-Burrito/profile-wrap/blob/main/docs/MCP.md).
