Skip to content
This repository was archived by the owner on May 21, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
3b014d9
fix hardcoded version
Pederzh Oct 10, 2025
e1c0c8e
update mcp-use
Pederzh Oct 10, 2025
6215e83
Fix mcp-ui template
Pederzh Oct 10, 2025
424e2e7
add cursor pointer
tonxxd Oct 10, 2025
93d07da
fix: dynamically set CLI version from package.json
tonxxd Oct 10, 2025
cca5f43
chore: update dependencies and improve CLI functionality
tonxxd Oct 11, 2025
21c9fc4
Merge branch 'beta' into feat/mcp-ui-apps
tonxxd Oct 11, 2025
a25db00
refactor: rename standalone server example to simple and update depen…
tonxxd Oct 11, 2025
1dbe763
feat: enhance resource handling and add pagination support
tonxxd Oct 11, 2025
a5a504d
feat: enhance create-mcp-use-app with new UI templates and improved s…
tonxxd Oct 11, 2025
b560cb9
feat: enhance InspectorDashboard and ResourcesTab with MCP UI support…
tonxxd Oct 11, 2025
6562884
refactor: remove unused data visualization and todo list components
tonxxd Oct 11, 2025
a27eb47
fix entrypoint
Pederzh Oct 13, 2025
8412002
simplify release workflows with single npm token
Pederzh Oct 13, 2025
68b92ea
remove ignored pkg in changeset
Pederzh Oct 13, 2025
07564bf
remove test_app
Pederzh Oct 13, 2025
04372cc
moved versioning changest stuff
Pederzh Oct 13, 2025
c7f88c7
update sdk version
tonxxd Oct 13, 2025
c780b17
feat: enhance InspectorDashboard with connection state management and…
tonxxd Oct 13, 2025
6fca18c
Merge branch 'changes' into feat/mcp-ui-apps
tonxxd Oct 13, 2025
1ccab89
refactor: update MCP server import paths and bump SDK version
tonxxd Oct 14, 2025
5b470a3
chore: add changesets
tonxxd Oct 14, 2025
6a03a44
chore: bump versions
tonxxd Oct 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["test-ui"]
"ignore": []
}
File renamed without changes.
File renamed without changes.
45 changes: 45 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,56 @@ Fixes # (issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Internal change (refactoring, tests, tooling)

## 📦 Changeset Required?

<!-- Most changes need a changeset! See the guide below for details. -->

**Does this PR need a changeset?**
- [ ] ✅ Yes - I have created a changeset (`pnpm changeset`)
- [ ] ❌ No - This is an internal-only change (docs, tests, tooling)

**Quick reminder:**
```bash
pnpm changeset # Creates a changeset interactively
```

**📚 Full guide:** [Changeset Workflow Guide](.github/CHANGESET_WORKFLOW.md)
**Need help?** See [when to create changesets](.github/CHANGESET_WORKFLOW.md#-changeset-types) and [examples](.github/CHANGESET_WORKFLOW.md#-changeset-types)

## 🚀 Release Target

- [ ] `main` branch → Stable release (default)
- [ ] `beta` branch → Beta/prerelease version
- [ ] Other feature branch → No release

**Releasing a beta?** See the [Beta Release Workflow Guide](.github/BETA_RELEASES.md) for instructions.

## Checklist

### Code Quality

- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] Existing tests pass locally (`pnpm test`)
- [ ] Linting passes (`pnpm lint`)
- [ ] Build succeeds (`pnpm build`)

### Documentation

- [ ] The title of my pull request follows the [conventional commits](https://www.conventionalcommits.org/) standard
- [ ] Changes have been documented in the README/documentation (if applicable)
- [ ] Breaking changes are clearly documented with migration steps

### Release Preparation

- [ ] **I have created a changeset** (`pnpm changeset`) - if this affects published packages
- [ ] The changeset has a clear, user-focused description
- [ ] Version bump type is appropriate (patch/minor/major)
- [ ] All affected packages are included in the changeset

### Additional Notes

<!-- Optional: Add any additional context, screenshots, or notes for reviewers -->
3 changes: 1 addition & 2 deletions VERSIONING.md → .github/VERSIONING.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ If you want packages to always have the same version:
### Ignore Packages

Packages already ignored (in `.changeset/config.json`):
- `test-ui` (test application, not published)
- add the package in `"ignore": []`

## CI/CD Integration

Expand Down Expand Up @@ -299,7 +299,6 @@ Make sure all packages are in the workspace config (`pnpm-workspace.yaml`):
```yaml
packages:
- 'packages/*'
- 'test_app'
```

### "Package is not published"
Expand Down
51 changes: 5 additions & 46 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,55 +36,14 @@ jobs:
- name: Install Dependencies
run: pnpm install

- name: Build Packages
run: pnpm build

- name: Create Release Pull Request or Publish to npm
id: changesets
uses: changesets/action@v1
with:
version: pnpm run version
commit: 'chore: version packages'
title: 'chore: version packages'
publish: pnpm release
version: pnpm version
commit: 'chore(release): version packages'
title: 'chore(release): version packages'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Publish mcp-use package with NPM_TOKEN
if: steps.changesets.outputs.hasChangesets == 'false'
run: |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
echo "📦 Publishing mcp-use with NPM_TOKEN..."
cd packages/mcp-use && pnpm publish --access public --no-git-checks
cd ../..
rm -f .npmrc
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Publish other packages with NPM_TOKEN_ORG
if: steps.changesets.outputs.hasChangesets == 'false'
run: |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN_ORG }}" > .npmrc

# Publish in dependency order: inspector and create-mcp-use-app first, then cli
echo "📦 Publishing @mcp-use/inspector with NPM_TOKEN_ORG..."
cd packages/inspector && pnpm publish --access public --no-git-checks
cd ../..

echo "📦 Publishing create-mcp-use-app with NPM_TOKEN_ORG..."
cd packages/create-mcp-use-app && pnpm publish --access public --no-git-checks
cd ../..

echo "📦 Publishing @mcp-use/cli with NPM_TOKEN_ORG..."
cd packages/cli && pnpm publish --access public --no-git-checks
cd ../..

rm -f .npmrc
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN_ORG }}

- name: Send Notification on Success
if: steps.changesets.outputs.hasChangesets == 'false'
run: |
echo "✅ Packages published successfully!"
echo "📦 mcp-use published with NPM_TOKEN"
echo "📦 Other packages published with NPM_TOKEN_ORG"
NPM_TOKEN: ${{ secrets.NPM_TOKEN_ORG }}
57 changes: 5 additions & 52 deletions .github/workflows/release_beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,62 +36,15 @@ jobs:
- name: Install Dependencies
run: pnpm install --no-frozen-lockfile

- name: Build Packages
run: pnpm build

- name: Create Release Pull Request or Publish to npm
id: changesets
uses: changesets/action@v1
with:
version: pnpm run version
commit: 'chore: version packages (beta)'
title: 'chore: version packages (beta)'
publish: pnpm release
version: pnpm version
commit: 'chore(release): version packages (beta)'
title: 'chore(release): version packages (beta)'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Publish mcp-use package with NPM_TOKEN (beta)
if: steps.changesets.outputs.hasChangesets == 'false'
run: |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
echo "📦 Publishing mcp-use@beta with NPM_TOKEN..."
cd packages/mcp-use && pnpm publish --access public --no-git-checks --tag beta
cd ../..
rm -f .npmrc
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Publish other packages with NPM_TOKEN_ORG (beta)
if: steps.changesets.outputs.hasChangesets == 'false'
run: |
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN_ORG }}" > .npmrc

# Publish in dependency order: inspector and create-mcp-use-app first, then cli
echo "📦 Publishing @mcp-use/inspector@beta with NPM_TOKEN_ORG..."
cd packages/inspector && pnpm publish --access public --no-git-checks --tag beta
cd ../..

echo "📦 Publishing create-mcp-use-app@beta with NPM_TOKEN_ORG..."
cd packages/create-mcp-use-app && pnpm publish --access public --no-git-checks --tag beta
cd ../..

echo "📦 Publishing @mcp-use/cli@beta with NPM_TOKEN_ORG..."
cd packages/cli && pnpm publish --access public --no-git-checks --tag beta
cd ../..

rm -f .npmrc
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN_ORG }}

- name: Send Notification on Success
if: steps.changesets.outputs.hasChangesets == 'false'
run: |
echo "✅ Beta packages published successfully!"
echo "📦 mcp-use@beta published with NPM_TOKEN"
echo "📦 Other packages@beta published with NPM_TOKEN_ORG"
echo ""
echo "Install beta versions with:"
echo " npm install mcp-use@beta"
echo " npm install @mcp-use/cli@beta"
echo " npm install @mcp-use/inspector@beta"
echo " npm install create-mcp-use-app@beta"
NPM_TOKEN: ${{ secrets.NPM_TOKEN_ORG }}

24 changes: 1 addition & 23 deletions INSPECTOR_INTEGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ The MCP Inspector is now automatically mounted at `/inspector` for all MCP serve
When developers create a new MCP server:

```typescript
import { createMCPServer } from 'mcp-use'
import { createMCPServer } from 'mcp-use/server'

const server = createMCPServer('my-server', {
version: '1.0.0',
Expand Down Expand Up @@ -121,26 +121,4 @@ For published packages:
- `packages/mcp-use/package.json` - Added inspector as optional peer dependency
- `packages/create-mcp-use-app/src/templates/ui/package.json` - Added inspector dependency
- `packages/create-mcp-use-app/src/templates/ui/src/server.ts` - Updated comments
- `test_app/package.json` - Added inspector dependency
- `test_app/src/server.ts` - Updated comments

## Testing

To test the integration:

1. Build all packages:
```bash
cd /Users/e.t./Projects/mcp-use/mcp-use-ts
pnpm install
cd packages/inspector && pnpm build
cd ../mcp-use && pnpm build
```

2. Run the test app:
```bash
cd test_app
pnpm dev
```

3. Open `http://localhost:3000/inspector` in your browser

3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
"private": true,
"type": "module",
"workspaces": [
"packages/*",
"test_app"
"packages/*"
],
"scripts": {
"build": "pnpm run build:mcp-use && pnpm run build:other",
Expand Down
9 changes: 9 additions & 0 deletions packages/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# @mcp-use/cli

## 2.1.3

### Patch Changes

- 5b470a3: fix: export server stuff from mcp-use/server instead of root
- Updated dependencies [5b470a3]
- @mcp-use/inspector@0.3.3
- mcp-use@1.0.1

## 2.1.2

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mcp-use/cli",
"version": "2.1.2",
"version": "2.1.3",
"description": "Build tool for MCP UI widgets - bundles React components into standalone HTML pages for Model Context Protocol servers",
"author": "mcp-use, Inc.",
"license": "MIT",
Expand Down
48 changes: 20 additions & 28 deletions packages/cli/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,27 @@
import { Command } from 'commander';
import { buildWidgets } from './build';
import { spawn } from 'node:child_process';
import { promises as fs } from 'node:fs';
import { readFileSync } from 'node:fs';
import { access } from 'node:fs/promises';
import path from 'node:path';
import open from 'open';

const program = new Command();


const packageContent = readFileSync(path.join(__dirname, '../package.json'), 'utf-8')
const packageJson = JSON.parse(packageContent)
const packageVersion = packageJson.version || 'unknown'


program
.name('mcp-use')
.description('MCP CLI tool')
.version('2.0.1');
.version(packageVersion);

// Helper to check if port is available
async function isPortAvailable(port: number): Promise<boolean> {
try {
const response = await fetch(`http://localhost:${port}`);
await fetch(`http://localhost:${port}`);
return false; // Port is in use
} catch {
return true; // Port is available
Expand Down Expand Up @@ -77,7 +83,7 @@ program
try {
const projectPath = path.resolve(options.path);

console.log('\x1b[36m\x1b[1mmcp-use\x1b[0m \x1b[90mVersion: 2.0.1\x1b[0m\n');
console.log(`\x1b[36m\x1b[1mmcp-use\x1b[0m \x1b[90mVersion: ${packageJson.version}\x1b[0m\n`);

// Run tsc first
console.log('Building TypeScript...');
Expand All @@ -103,7 +109,7 @@ program
const projectPath = path.resolve(options.path);
let port = parseInt(options.port, 10);

console.log('\x1b[36m\x1b[1mmcp-use\x1b[0m \x1b[90mVersion: 2.0.1\x1b[0m\n');
console.log(`\x1b[36m\x1b[1mmcp-use\x1b[0m \x1b[90mVersion: ${packageJson.version}\x1b[0m\n`);

// Check if port is available, find alternative if needed
if (!(await isPortAvailable(port))) {
Expand All @@ -114,11 +120,11 @@ program
}

// Find the main source file
let serverFile = 'src/server.ts';
let serverFile = 'index.ts';
try {
await fs.access(path.join(projectPath, serverFile));
await access(path.join(projectPath, serverFile));
} catch {
serverFile = 'src/index.ts';
serverFile = 'src/server.ts';
}

// Start all processes concurrently
Expand Down Expand Up @@ -149,25 +155,11 @@ program
// 3. Server with tsx
const serverProc = spawn('npx', ['tsx', 'watch', serverFile], {
cwd: projectPath,
stdio: 'pipe',
stdio: 'inherit',
shell: false,
env: { ...process.env, PORT: String(port) },
});

// Handle server errors gracefully
serverProc.stderr?.on('data', (data) => {
const output = data.toString();
if (output.includes('EADDRINUSE')) {
console.log(`\x1b[31m✗\x1b[0m Port ${port} is still in use. Please try a different port with --port`);
console.log(`\x1b[90mHint: Use --port 3001 or kill the process using port ${port}\x1b[0m`);
process.exit(1);
}
});

serverProc.stdout?.on('data', (data) => {
process.stdout.write(data);
});

processes.push(serverProc);

// Auto-open inspector if enabled
Expand Down Expand Up @@ -215,14 +207,14 @@ program
const projectPath = path.resolve(options.path);
const port = parseInt(options.port, 10);

console.log('\x1b[36m\x1b[1mmcp-use\x1b[0m \x1b[90mVersion: 2.0.1\x1b[0m\n');
console.log(`\x1b[36m\x1b[1mmcp-use\x1b[0m \x1b[90mVersion: ${packageJson.version}\x1b[0m\n`);

// Find the built server file
let serverFile = 'dist/server.js';
let serverFile = 'dist/index.js';
try {
await fs.access(path.join(projectPath, serverFile));
await access(path.join(projectPath, serverFile));
} catch {
serverFile = 'dist/index.js';
serverFile = 'dist/server.js';
}

console.log('Starting production server...');
Expand Down
Loading