<!--
Copyright 2025 Adobe. All rights reserved.
This file is licensed to you under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. You may obtain a copy
of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
OF ANY KIND, either express or implied. See the License for the specific language
governing permissions and limitations under the License.
-->

# generator-app-remote-mcp-server-generic

[![Version](https://img.shields.io/npm/v/@adobe/generator-app-remote-mcp-server-generic.svg)](https://npmjs.org/package/@adobe/generator-app-remote-mcp-server-generic)
[![Downloads/week](https://img.shields.io/npm/dw/@adobe/generator-app-remote-mcp-server-generic.svg)](https://npmjs.org/package/@adobe/generator-app-remote-mcp-server-generic)
[![Node.js CI](https://github.com/adobe/generator-app-remote-mcp-server-generic/actions/workflows/node.js.yml/badge.svg)](https://github.com/adobe/generator-app-remote-mcp-server-generic/actions/workflows/node.js.yml)
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/adobe/generator-app-remote-mcp-server-generic/blob/main/LICENSE)
[![Codecov Coverage](https://img.shields.io/codecov/c/github/adobe/generator-app-remote-mcp-server-generic/master.svg?style=flat-square)](https://codecov.io/gh/adobe/generator-app-remote-mcp-server-generic/)

Adobe App Builder template for creating **Model Context Protocol (MCP) servers** using the official **MCP TypeScript SDK** and Adobe I/O Runtime.


## What is this template?

Generate **MCP servers** that run on Adobe I/O Runtime. Connect AI assistants like Cursor, Claude Desktop, and other AI tools to your custom functions, data, and prompts through the standardized MCP protocol.

### Key Features

- 🔧 **Official MCP TypeScript SDK**: Built with `@modelcontextprotocol/sdk` v1.17.4
- 📝 **Type Safety**: Zod schema validation for all parameters
- 🚀 **Serverless Ready**: Deploy to Adobe I/O Runtime with auto-scaling
- 🛠️ **Complete MCP Implementation**: Tools, Resources, and Prompts support
- 🔐 **Built-in Authentication**: IMS token validation and API key support
- 📚 **Production Ready**: Error handling, logging, and CORS included

## Quick Start

### Prerequisites
- Node.js 18+ 
- Adobe I/O CLI: `npm install -g @adobe/aio-cli`
- Adobe Developer Console project with I/O Runtime enabled

### Generate Project

```bash
# Using Adobe I/O CLI , You will see tempalte generator-app-remote-mcp-server-generic listed in the all tempaltes list
aio app init

```

### Deploy & Use

```bash
cd my-mcp-server
aio app use <your-workspace-config.json>
aio app deploy

```

Connect to your deployed MCP server in Cursor or Claude Desktop using the provided URL.

### Claude Desktop Configuration

Add this to your Claude Desktop configuration file:

```json
{
  "mcpServers": {
    "mcp-server-name": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://xxxx.adobeioruntime.net/api/v1/web/your-project/mcp-server"
      ]
    }
  }
}
```

### Cursor configs 
```json
{
  "mcpServers": {
    "mcp-server-name": {
      "url": "https://<namespace>.adobeioruntime.net/api/v1/web/<xyz>/mcp-server",
      "type": "streamable-http"  
   }
  }
}
```

### Example Test prompt 
" Hey, Can you please ask #mcp-server-name# about weather in Noida? "

## MCP Features

**Tools**: Interactive functions AI assistants can call (echo, calculator, weather)
**Resources**: Static content access (documentation, data, files)  
**Prompts**: Reusable prompt templates with parameters

All implemented using the official MCP TypeScript SDK  

## Authentication

The generated MCP servers include built-in authentication support to secure your endpoints:

### IMS Token Validation (Adobe Users)

Validate Bearer tokens via Adobe IMS userinfo endpoint. Ideal for Adobe employee or partner authentication.

**Setup:**
```bash
# Set in .env or app.config.yaml
AUTH_VALIDATE_IMS=true
```

**Client Configuration (Cursor):**
```json
{
  "mcpServers": {
    "my-mcp": {
      "url": "https://namespace.adobeioruntime.net/api/v1/web/pkg/mcp-server",
      "type": "streamable-http",
      "headers": {
        "Authorization": "Bearer YOUR_IMS_TOKEN"
      }
    }
  }
}
```

**Client Configuration (Claude Desktop):**
```json
{
  "mcpServers": {
    "my-mcp": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://namespace.adobeioruntime.net/api/v1/web/pkg/mcp-server",
        "--header",
        "Authorization:${IMS_TOKEN}"
      ],
      "env": {
        "IMS_TOKEN": "Bearer YOUR_IMS_TOKEN"
      }
    }
  }
}
```

### API Key Authentication (Service-to-Service)

Simple key-based authentication for service-to-service communication.

**Setup:**
```bash
# Set in .env or app.config.yaml
SERVICE_API_KEY=your-secret-key-here
```

**Client Configuration (Cursor):**
```json
{
  "mcpServers": {
    "my-mcp": {
      "url": "https://namespace.adobeioruntime.net/api/v1/web/pkg/mcp-server",
      "type": "streamable-http",
      "headers": {
        "x-api-key": "your-secret-key-here"
      }
    }
  }
}
```

**Client Configuration (Claude Desktop):**
```json
{
  "mcpServers": {
    "my-mcp": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://namespace.adobeioruntime.net/api/v1/web/pkg/mcp-server",
        "--header",
        "x-api-key:${API_KEY}"
      ],
      "env": {
        "API_KEY": "your-secret-key-here"
      }
    }
  }
}
```

### No Authentication (Development Only)

Leave both variables unset for open access during development. **Not recommended for production.**

**Security Best Practices:**
- Always enable authentication in production deployments
- Use strong random values for `SERVICE_API_KEY`
- Never commit secrets to version control
- Rotate API keys regularly

## Development

### Testing the Generator

```bash
# Run unit tests
npm test

# Test end-to-end generation
npm run e2e
```

### Customizing the Template

1. **Modify Templates**: Edit files in `src/templates/`
2. **Update Generator**: Modify `src/index.js` for prompts/logic
3. **Extend Features**: Add capabilities in `src/templates/actions/mcp-server/tools.js`

## 👥 Contributors

<a href="https://github.com/adobe/generator-app-remote-mcp-server-generic/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=adobe/generator-app-remote-mcp-server-generic" />
</a>


## Resources

- 📚 [MCP Documentation](https://modelcontextprotocol.io/docs)
- 🔧 [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)
- 🏗️ [Adobe I/O Runtime](https://developer.adobe.com/runtime/docs/)
- 📖 [App Builder Templates](https://developer.adobe.com/app-builder-template-registry/guides/creating_template/)

## License

Apache V2 License - see [LICENSE](LICENSE) for details.
