Metadata-Version: 2.4
Name: aimarket-mcp-packager
Version: 2.0.0
Summary: Package products as ready-to-run MCP servers for Claude Desktop
License: MIT
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: aimarket-hub>=3.0.0
Provides-Extra: mcp
Requires-Dist: mcp<4,>=1.6; extra == "mcp"
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Dynamic: license-file

# aimarket-mcp-packager — MCP server

<!-- aicom-readme-badges -->
<p align="center">
  <a href="https://github.com/alexar76/aimarket-plugins/actions/workflows/ci.yml"><img src="https://github.com/alexar76/aimarket-plugins/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
  <a href="https://glama.ai/mcp/servers/alexar76/aimarket-plugins"><img src="https://glama.ai/mcp/servers/alexar76/aimarket-plugins/badges/score.svg" alt="aimarket-plugins MCP server" /></a>
  <a href="#testing--coverage"><img src="docs/badges/coverage.svg" alt="Test coverage" /></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache--2.0-blue.svg" alt="License: Apache-2.0" /></a>
</p>
<!-- /aicom-readme-badges -->





**This repository ships a [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server** that packages AIMarket capabilities into self-hosted MCP server products (Docker image metadata, MCP manifest, Claude Desktop config).

Transport: **stdio** (`mcp_stdio_server.py`). Built with the official **[MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)** (`mcp` package, `FastMCP`).

Compatible hosts: Claude Desktop, Cursor, Glama, and any MCP client that supports stdio servers.

---

## MCP server in this repo

| Item | Location |
|------|----------|
| MCP entrypoint | [`mcp_stdio_server.py`](mcp_stdio_server.py) |
| MCP SDK dependency | [`requirements-mcp.txt`](requirements-mcp.txt) — `mcp>=1.6,<4` |
| Glama / Docker run | [`Dockerfile`](Dockerfile), [`glama.json`](glama.json) |
| Tool implementation | [`aimarket_mcp_packager/packager_core.py`](aimarket_mcp_packager/packager_core.py) |

Run locally:

```bash
pip install -r requirements-mcp.txt
pip install -e .
python mcp_stdio_server.py
```

Or with Docker (stdio MCP server):

```bash
docker build -t aimarket-mcp-packager .
docker run --rm -i aimarket-mcp-packager
```

---

## MCP tools

The server exposes **3 tools** (no MCP resources or prompts):

| Tool | Description |
|------|-------------|
| `package_capability` | Build an MCP server package: Docker image name, `mcp_manifest`, subscription tiers, connection string |
| `generate_dockerfile` | Generate a Dockerfile template for the packaged MCP server |
| `generate_claude_desktop_config` | Generate a `claude_desktop_config.json` snippet (`mcpServers`) for docker-run MCP |

Example tool call (conceptual):

```json
{
  "name": "package_capability",
  "arguments": {
    "capability_id": "translate.multi@v2",
    "product_id": "prod-001",
    "name": "Lyra",
    "description": "Multilingual translator",
    "input_schema": { "type": "object", "properties": { "text": { "type": "string" } }, "required": ["text"] }
  }
}
```

> `input_schema` takes a JSON Schema **object** (a JSON string is also tolerated for backward compatibility). Every tool parameter is documented in the server's tool schema for MCP clients.

---

## MCP resources

This server does **not** register MCP resources or prompts — only the tools above. Output is JSON text returned from each tool call.

---

## Client configuration

### Claude Desktop

```json
{
  "mcpServers": {
    "aimarket-mcp-packager": {
      "command": "python",
      "args": ["/path/to/aimarket-mcp-packager/mcp_stdio_server.py"]
    }
  }
}
```

Docker variant (see `generate_claude_desktop_config` tool output):

```json
{
  "mcpServers": {
    "aimarket-mcp-packager": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "aimarket-mcp-packager:latest"]
    }
  }
}
```

### Cursor

Add the same stdio server under **Settings → MCP** (command + args pointing at `mcp_stdio_server.py` or the Docker image above).

---

## Python library (optional)

The same packaging logic is available as a library and as an AIMarket Hub plugin (PyPI package coming soon — for now `pip install -e .` from this directory, or use the AIMarket Hub Docker image). Hub HTTP routes are optional; **the MCP server runs standalone** via `mcp_stdio_server.py`.

```python
from aimarket_mcp_packager.mcp_packager import MCPPackager

packager = MCPPackager()
pkg = packager.package(
    capability_id="translate.multi@v2",
    product_id="prod-001",
    name="Lyra",
    description="Multilingual translator",
    input_schema={"type": "object", "properties": {"text": {"type": "string"}}},
    price_per_call_usd=0.40,
)

print(pkg.docker_image)
print(pkg.mcp_manifest)
print(packager.generate_claude_desktop_config(pkg))
```

---

## When to use

- Distribute AI capabilities as self-hosted MCP servers (Docker + manifest)
- Generate Claude Desktop / Cursor MCP client configs
- Enterprise on-prem deployment with subscription tiers

## Subscription tiers (packaged products)

| Tier | Calls/month | Price |
|------|------------|-------|
| Starter | 100 | $9.99 |
| Pro | 1,000 | $49.99 |
| Enterprise | 10,000 | $299.99 |

## Documentation

| Document | Description |
|----------|-------------|
| [User guide](docs/user-guide.md) | Install, Hub plugin, verify loaded |
| [User cases](docs/user-cases.md) | Personas and cross-plugin workflows |
| [SDK integration](docs/sdk-integration.md) | Code examples and hook behavior |

## License

MIT · Maintained by AI-Factory
