Skip to content

Commit 0f9e874

Browse files
committed
2 parents ad20225 + 5e7287c commit 0f9e874

File tree

6 files changed

+152
-34
lines changed

6 files changed

+152
-34
lines changed

.github/workflows/release.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
on:
2+
release:
3+
types:
4+
- published
5+
6+
name: Release
7+
8+
jobs:
9+
pypi-publish:
10+
runs-on: ubuntu-latest
11+
environment:
12+
name: pypi
13+
url: https://pypi.org/p/mcpm
14+
permissions:
15+
# IMPORTANT: this permission is mandatory for Trusted Publishing
16+
id-token: write
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
21+
- name: Install uv with caching
22+
uses: astral-sh/setup-uv@v5
23+
with:
24+
enable-cache: true
25+
cache-dependency-glob: "pyproject.toml"
26+
27+
- name: Build
28+
run: uv build
29+
30+
- name: Publish distribution to PyPI
31+
uses: pypa/gh-action-pypi-publish@release/v1
32+

README.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,30 +28,30 @@ MCPM provides a comprehensive CLI built with Python's Click framework. Below are
2828
### Basic Commands
2929

3030
```
31-
mcpm --help # Display help information and available commands
32-
mcpm --version # Display the current version of MCPM
31+
mcpm --help # Display help information and available commands
32+
mcpm --version # Display the current version of MCPM
3333
```
3434

3535
### Available Commands
3636

3737
```
38-
mcpm client # Show the current active MCP client
39-
mcpm client CLIENT_NAME # Set a new active MCP client
40-
mcpm client --list # List all supported MCP clients and their status
38+
mpcm add SERVER_NAME # Add an MCP server to the active client
39+
mcpm add SERVER_NAME --alias ALIAS_NAME # Add an MCP server to the active client with a custom alias
4140
42-
mcpm edit # View or edit the active MCP client's configuration file
41+
mcpm client # Show the current active MCP client
42+
mcpm client CLIENT_NAME # Set a new active MCP client
43+
mcpm client --list # List all supported MCP clients and their status
4344
44-
mcpm list # List all installed MCP servers
45+
mcpm edit # View or edit the active MCP client's configuration file
4546
46-
mcpm remove SERVER_NAME # Remove an installed MCP server
47+
mcpm list # List all installed MCP servers
4748
48-
mcpm server # Manage MCP server processes
49-
mcpm server start SERVER_NAME # Start an MCP server
50-
mcpm server stop SERVER_NAME # Stop an MCP server
51-
mcpm server restart SERVER_NAME # Restart an MCP server
52-
mcpm server status # Show status of running MCP servers
49+
mcpm remove SERVER_NAME # Remove an installed MCP server
5350
54-
mcpm toggle SERVER_NAME # Toggle an MCP server on or off for a client
51+
mcpm stash SERVER_NAME # Temporarily disable an MCP server for a client
52+
mcpm pop SERVER_NAME # Re-enable an MCP server for a client
53+
54+
mcpm inspect SERVER_NAME # Launch the MCPM Inspector UI to examine servers
5555
```
5656

5757
### Registry
@@ -103,7 +103,7 @@ mcpm.sh/
103103

104104
1. Clone the repository
105105
```
106-
git clone https://github.com/getmcp-xyz/mcpm.sh.git
106+
git clone https://github.com/pathintegral-institute/mcpm.sh.git
107107
cd mcpm.sh
108108
```
109109

@@ -121,7 +121,7 @@ mcpm.sh/
121121
4. Run the CLI directly during development
122122
```
123123
# Either use the installed package
124-
mcp --help
124+
mcpm --help
125125
126126
# Or use the development script
127127
./test_cli.py --help
@@ -136,7 +136,7 @@ mcpm.sh/
136136

137137
- Use the src-based directory structure to prevent import confusion
138138
- Develop with an editable install using `uv pip install -e .`
139-
- Keep commands modular in the `src/mcp/commands/` directory
139+
- Keep commands modular in the `src/mcpm/commands/` directory
140140
- Add tests for new functionality in the `tests/` directory
141141
- Use the `test_cli.py` script for quick development testing
142142

@@ -148,7 +148,7 @@ MCP uses a single source of truth pattern for version management to ensure consi
148148
#### Version Structure
149149

150150
- The canonical version is defined in `version.py` at the project root
151-
- `src/mcp/__init__.py` imports this version
151+
- `src/mcpm/__init__.py` imports this version
152152
- `pyproject.toml` uses dynamic versioning to read from `version.py`
153153
- Git tags are created with the same version number prefixed with 'v' (e.g., v1.0.0)
154154

@@ -170,6 +170,7 @@ When releasing a new version:
170170
3. Create a GitHub release matching the new version
171171

172172
This process ensures that the version is consistent in all places: code, package metadata, and git tags.
173+
PyPI release is handled by the CI/CD pipeline and will be triggered automatically.
173174

174175
## License
175176

pages/index.html

Lines changed: 91 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,48 @@
219219
font-size: 1.2rem;
220220
}
221221
}
222+
223+
.install-tabs {
224+
margin: 2rem 0;
225+
}
226+
227+
.install-tabs .tabs {
228+
display: flex;
229+
border-bottom: 2px solid var(--accent-color);
230+
margin-bottom: 0;
231+
}
232+
233+
.install-tabs .tab-button {
234+
padding: 0.7rem 1.5rem;
235+
border: none;
236+
background-color: var(--bg-accent);
237+
color: var(--text-primary);
238+
cursor: pointer;
239+
transition: all 0.2s ease;
240+
margin-right: 4px;
241+
font-weight: 500;
242+
}
243+
244+
.install-tabs .tab-button:hover {
245+
background-color: rgba(92, 217, 81, 0.2);
246+
}
247+
248+
.install-tabs .tab-button.active {
249+
background-color: var(--accent-color);
250+
color: var(--text-secondary);
251+
}
252+
253+
.install-tabs .tab-content {
254+
display: none;
255+
padding: 1.5rem;
256+
border: 1px solid var(--card-border);
257+
border-top: none;
258+
background-color: var(--bg-accent);
259+
}
260+
261+
.install-tabs .tab-content.active {
262+
display: block;
263+
}
222264
</style>
223265
</head>
224266
<body>
@@ -258,10 +300,36 @@ <h1>MCP Manager</h1>
258300

259301
<div class="coming-soon">
260302
<h2>Quick Installation</h2>
261-
<p>Install MCPM with a single command:</p>
262-
<div class="code-block">
263-
<code><span class="command-prompt">$</span> curl -sSL https://mcpm.sh/install | bash</code>
264-
<button class="copy-button" data-command="curl -sSL https://mcpm.sh/install | bash"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button>
303+
<div class="install-tabs">
304+
<div class="tabs">
305+
<button class="tab-button active" data-tab="pipx">pipx</button>
306+
<button class="tab-button" data-tab="pip">pip</button>
307+
<button class="tab-button" data-tab="script">Shell</button>
308+
</div>
309+
310+
<div class="tab-content active" id="pipx-tab">
311+
<p>Install with pipx:</p>
312+
<div class="code-block">
313+
<code><span class="command-prompt">$</span> pipx install mcpm</code>
314+
<button class="copy-button" data-command="pipx install mcpm"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button>
315+
</div>
316+
</div>
317+
318+
<div class="tab-content" id="pip-tab">
319+
<p>Install with pip:</p>
320+
<div class="code-block">
321+
<code><span class="command-prompt">$</span> pip install mcpm</code>
322+
<button class="copy-button" data-command="pip install mcpm"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button>
323+
</div>
324+
</div>
325+
326+
<div class="tab-content" id="script-tab">
327+
<p>Install with a single command:</p>
328+
<div class="code-block">
329+
<code><span class="command-prompt">$</span> curl -sSL https://mcpm.sh/install | bash</code>
330+
<button class="copy-button" data-command="curl -sSL https://mcpm.sh/install | bash"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg></button>
331+
</div>
332+
</div>
265333
</div>
266334
<p>Model Context Protocol Manager (MCPM) is a Homebrew-like service for managing Model Context Protocol (MCP) servers across clients.</p>
267335
</div>
@@ -484,6 +552,25 @@ <h2>Supported Clients</h2>
484552
// Fix for SVG animation in some browsers
485553
setInterval(updateCursor, 100);
486554
}
555+
556+
// Tabbed installation section
557+
const tabButtons = document.querySelectorAll('.tab-button');
558+
const tabContents = document.querySelectorAll('.tab-content');
559+
560+
tabButtons.forEach(button => {
561+
button.addEventListener('click', function() {
562+
const tabId = this.getAttribute('data-tab');
563+
const tabContent = document.getElementById(`${tabId}-tab`);
564+
565+
// Remove active class from all buttons and contents
566+
tabButtons.forEach(button => button.classList.remove('active'));
567+
tabContents.forEach(content => content.classList.remove('active'));
568+
569+
// Add active class to the selected button and content
570+
this.classList.add('active');
571+
tabContent.classList.add('active');
572+
});
573+
});
487574
});
488575
</script>
489576
</body>

pages/install

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ verify_installation() {
141141
echo
142142
echo -e "${DARK_GREEN}To get started with MCPM, try:${NC}"
143143
echo -e " ${LIGHT_GREEN}mcpm --help${NC} # Show available commands"
144-
echo -e " ${LIGHT_GREEN}mcpm list --available${NC} # List available MCP servers"
145-
echo -e " ${LIGHT_GREEN}mcpm install <server>${NC} # Install an MCP server"
144+
echo -e " ${LIGHT_GREEN}mcpm list${NC} # List local MCP servers"
145+
echo -e " ${LIGHT_GREEN}mcpm add <server>${NC} # Install an MCP server"
146146
echo
147147
echo -e "For more information, visit ${DARK_GREEN}https://mcpm.sh${NC}"
148148
echo

pyproject.toml

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ readme = "README.md"
1010
requires-python = ">=3.8"
1111
license = "MIT"
1212
authors = [{ name = "MCPM Contributors" }]
13+
maintainers = [{ name = "Path Integral Institute" }]
14+
keywords = ["MCPM", "MCP", "Model Context Protocol", "Claude Desktop", "Cursor", "Windsurf"]
1315
dependencies = [
1416
"click>=8.1.3",
1517
"rich>=12.0.0",
@@ -19,18 +21,14 @@ dependencies = [
1921
"jsonschema>=4.17.0",
2022
]
2123

24+
[project.urls]
25+
Homepage = "https://mcpm.sh"
26+
Repository = "https://github.com/pathintegral-institute/mcpm.sh"
27+
Issues = "https://github.com/pathintegral-institute/mcpm.sh/issues"
28+
2229
[project.scripts]
2330
mcpm = "mcpm.cli:main"
2431

25-
[tool.hatch.build]
26-
packages = ["src/mcpm"]
27-
28-
[tool.hatch.build.targets.wheel]
29-
packages = ["src/mcpm"]
30-
31-
[tool.hatch.build.targets.sdist]
32-
packages = ["src/mcpm"]
33-
3432
[tool.hatch.version]
3533
path = "src/mcpm/version.py"
3634

src/mcpm/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Single source of truth for MCPM version."""
22

3-
__version__ = "1.0.0"
3+
__version__ = "1.0.2"

0 commit comments

Comments
 (0)