@de-otio/epimethian-mcp 4.1.2 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -6
- package/dist/cli/index.js +1563 -140
- package/dist/cli/index.js.map +4 -4
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -74,31 +74,68 @@ Each project's `.mcp.json` specifies which profile to use. Profiles are fully is
|
|
|
74
74
|
Manage profiles:
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
|
-
epimethian-mcp profiles # list all
|
|
78
|
-
epimethian-mcp profiles --verbose # show URLs and
|
|
77
|
+
epimethian-mcp profiles # list all (shows read-only status)
|
|
78
|
+
epimethian-mcp profiles --verbose # show URLs, emails, and read-only status
|
|
79
79
|
CONFLUENCE_PROFILE=jambit epimethian-mcp status # test connection
|
|
80
80
|
epimethian-mcp profiles --remove <name> # delete profile and credentials
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
The `--remove` command deletes the profile's keychain entry and registry record after interactive confirmation. For non-interactive environments (CI, agent shell sessions), pass `--force` to skip the prompt.
|
|
84
84
|
|
|
85
|
+
### Per-Profile Read-Only Mode
|
|
86
|
+
|
|
87
|
+
Protect client tenants from accidental writes:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
epimethian-mcp profiles --set-read-only acme-corp
|
|
91
|
+
epimethian-mcp profiles --set-read-write jambit
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
New profiles default to **read-only**. The `setup` command prompts "Enable writes for this profile? [y/N]" or accepts `--read-write` for non-interactive use.
|
|
95
|
+
|
|
96
|
+
When a profile is read-only, all write tools (`create_page`, `update_page`, `update_page_section`, `delete_page`, `add_attachment`, `add_drawio_diagram`, `add_label`, `remove_label`, `create_comment`, `resolve_comment`, `delete_comment`, `set_page_status`, `remove_page_status`) return an error with a remediation command. Read tools work normally. The read-only flag is resolved at server startup — restart running servers after changing it.
|
|
97
|
+
|
|
98
|
+
## Token Efficiency
|
|
99
|
+
|
|
100
|
+
Confluence pages are verbose — storage format HTML with macro markup can easily reach 50,000+ tokens. Epimethian reduces token usage through several strategies, all lossless with respect to Confluence data:
|
|
101
|
+
|
|
102
|
+
- **Drill-down pattern** — Use `headings_only` to get a page outline (~500 tokens), then `section` to read just the part you need in storage format. No need to fetch the full page body.
|
|
103
|
+
- **Section-level editing** — `update_page_section` replaces content under a single heading. The rest of the page is never touched, eliminating the need to send the full body on updates.
|
|
104
|
+
- **Page cache** — An in-memory, version-keyed cache eliminates redundant API calls during iterative editing. After updating a page, subsequent reads serve from cache (~90% fewer tokens on repeated reads).
|
|
105
|
+
- **Search excerpts** — Search results include content previews so the agent can triage results without calling `get_page` on each one.
|
|
106
|
+
- **Markdown view** — `format: "markdown"` returns a compact read-only rendering where macros become `[macro: name]` placeholders. The server rejects any attempt to write markdown back — storage format is the only accepted write format.
|
|
107
|
+
- **Truncation** — `max_length` cuts the body at an element boundary with a `[truncated at N of M characters]` marker.
|
|
108
|
+
|
|
85
109
|
## Tools
|
|
86
110
|
|
|
87
111
|
| Tool | Description |
|
|
88
112
|
| -------------------- | -------------------------- |
|
|
89
113
|
| `create_page` | Create a new page |
|
|
90
|
-
| `get_page` | Read a page by ID (
|
|
91
|
-
| `get_page_by_title` | Look up a page by title (
|
|
92
|
-
| `update_page` | Update an existing page
|
|
114
|
+
| `get_page` | Read a page by ID (`headings_only`, `section`, `max_length`, `format`) |
|
|
115
|
+
| `get_page_by_title` | Look up a page by title (same options as `get_page`) |
|
|
116
|
+
| `update_page` | Update an existing page (rejects markdown input) |
|
|
93
117
|
| `update_page_section`| Update a single section by heading name |
|
|
94
118
|
| `delete_page` | Delete a page |
|
|
95
119
|
| `list_pages` | List pages in a space |
|
|
96
120
|
| `get_page_children` | Get child pages |
|
|
97
|
-
| `search_pages` | Search via CQL
|
|
121
|
+
| `search_pages` | Search via CQL (includes content excerpts) |
|
|
98
122
|
| `get_spaces` | List available spaces |
|
|
99
123
|
| `add_attachment` | Upload a file attachment |
|
|
100
124
|
| `get_attachments` | List attachments on a page |
|
|
101
125
|
| `add_drawio_diagram` | Add a draw.io diagram |
|
|
126
|
+
| `get_labels` | Get all labels on a page |
|
|
127
|
+
| `add_label` | Add one or more labels to a page |
|
|
128
|
+
| `remove_label` | Remove a label from a page |
|
|
129
|
+
| `get_comments` | Read page comments (footer and inline) |
|
|
130
|
+
| `create_comment` | Add a comment to a page |
|
|
131
|
+
| `resolve_comment` | Resolve or reopen an inline comment |
|
|
132
|
+
| `delete_comment` | Delete a comment |
|
|
133
|
+
| `get_page_status` | Get the content status badge on a page |
|
|
134
|
+
| `set_page_status` | Set the content status badge on a page |
|
|
135
|
+
| `remove_page_status` | Remove the content status badge from a page |
|
|
136
|
+
| `get_page_versions` | List version history for a page |
|
|
137
|
+
| `get_page_version` | Get page content at a specific historical version |
|
|
138
|
+
| `diff_page_versions` | Compare two versions of a page |
|
|
102
139
|
|
|
103
140
|
## Credential Security
|
|
104
141
|
|