ai-sdlc-harness-mcp
ai-sdlc-harness-mcp
A small MCP (Model Context Protocol) server built while wiring an AI-assisted
SDLC harness for a Stockbook app project. It currently ships one tool:
create_confluence_page.
Why this exists
While integrating Claude with our Atlassian Cloud site, the hosted Rovo
MCP server's createConfluencePage tool returned a persistent 404 on
every attempt, across:
both a space key and a resolved numeric
spaceIdparentIdpresent and absentstatus: currentandstatus: draftmultiple different spaces
two independently (re-)connected Rovo MCP instances
Meanwhile every read operation on the same authenticated Rovo session
succeeded (getConfluenceSpaces, getConfluencePage,
searchConfluenceUsingCql, etc.), and the OAuth session carried the
write:page:confluence scope. To rule out a permissions problem, we
manually created a page through the real Confluence web UI with the same
account -- it worked immediately. That isolates the failure to the hosted
createConfluencePage route itself, not to credentials or scopes.
This package is a minimal, working replacement: it talks to the Confluence Cloud REST API v2 directly over HTTPS Basic auth (Atlassian account email + API token), the same way Atlassian's own documented API examples do.
Setup
npm install
npm run buildCopy .env.example to .env and fill in:
ATLASSIAN_EMAIL=you@example.com
ATLASSIAN_API_TOKEN=... # https://id.atlassian.com/manage-profile/security/api-tokens
CONFLUENCE_SITE=https://your-site.atlassian.netRunning as an MCP server
Point an MCP client (e.g. Claude Code's mcp config) at:
{
"mcpServers": {
"ai-sdlc-harness": {
"command": "node",
"args": ["/absolute/path/to/ai-sdlc-harness-mcp/dist/index.js"],
"env": {
"ATLASSIAN_EMAIL": "you@example.com",
"ATLASSIAN_API_TOKEN": "...",
"CONFLUENCE_SITE": "https://your-site.atlassian.net"
}
}
}
}Tool: create_confluence_page
Field | Type | Required | Notes |
| string | yes | Numeric space ID, or a space key (e.g. |
| string | yes | Page title |
| string | yes | Confluence storage-format HTML, not Markdown, not editor paste |
| string | no | Numeric ID of the parent page |
| string | no |
|
bodyHtml must be Confluence storage format
(plain HTML-like tags: <p>, <h2>, <ul>, <strong>, etc.) — the same
format the REST API itself expects. It is not aware of the visual editor's
proprietary macros beyond what you supply verbatim.
Known limitation
This server calls the Atlassian Cloud REST API directly over HTTPS, so it
requires outbound network access to your *.atlassian.net site. If your
network enforces an egress allowlist that blocks that host (as ours did
during development), this tool will fail the same way plain curl would —
that's an organization network-policy question, not a bug in this code.
License
MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DungNV512/ai-sdlc-harness-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server