Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ wheels/
.installed.cfg
*.egg

# Nix Build
result

# Virtual environments
.venv
venv/
Expand Down
43 changes: 43 additions & 0 deletions README.nix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# MCPM Nix Packaging

This repository contains Nix packaging for MCPM (Model Context Protocol Manager).

## Using with Nix Flakes

If you have flakes enabled, you can use this package directly:

```bash
# Run MCPM directly
nix run .

# Install MCPM to your profile
nix profile install github:pathintegral-institute/mcpm.sh

# Enter a development shell
nix develop .
```

## Building from Source

To build the package from source:

1. Clone the repository:
```bash
git clone https://github.com/pathintegral-institute/mcpm.sh
cd mcpm.sh
```

2. Build the package:
```bash
nix build
```

3. Run the built package:
```bash
./result/bin/mcpm --help
```

## Notes

- The nix package requires Python 3.12 or higher.

73 changes: 73 additions & 0 deletions default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
lib,
python3,
}:

let
# Use Python 3.12
python = python3; # pkgs.python312;

# Override Python to include our custom packages
pythonWithPackages = python.override {
packageOverrides = self: super: {
# Add our custom packages
};
};
in
pythonWithPackages.pkgs.buildPythonApplication rec {
pname = "mcpm";
version = "1.13.1"; # From src/mcpm/version.py

src = ./.; # Use the local directory as the source

format = "pyproject";

nativeBuildInputs = with pythonWithPackages.pkgs; [
hatchling
setuptools
wheel
pip
];

propagatedBuildInputs = with pythonWithPackages.pkgs; [
# Core dependencies from pyproject.toml
click
rich
requests
pydantic
duckdb
psutil
prompt-toolkit
deprecated

# dependencies only available for Python>=3.12 on nixpkgs
mcp
ruamel-yaml
watchfiles

# Additional dependencies that might be needed
typer
httpx
anyio
fastapi
uvicorn
websockets
jinja2
pyyaml
toml
python-dotenv
packaging
colorama
];

# Disable tests for now
#doCheck = false;

meta = with lib; {
description = "MCPM - Model Context Protocol Manager";
homepage = "https://mcpm.sh";
license = licenses.mit;
maintainers = with maintainers; [ luochen1990 ];
mainProgram = "mcpm";
};
}
61 changes: 61 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

57 changes: 57 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{
description = "MCPM - Model Context Protocol Manager";

inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};

outputs =
{
self,
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
config = {
allowUnfree = true;
permittedInsecurePackages = [ ];
};
};
in
{
packages = {
default = pkgs.callPackage ./default.nix { };
};

apps.default = flake-utils.lib.mkApp {
drv = self.packages.${system}.default;
};

devShells.default = pkgs.mkShell {
inputsFrom = [ self.packages.${system}.default ];

buildInputs = with pkgs.python3.pkgs; [
self.packages.${system}.default

# From pyproject.toml's dev dependencies
ipython
pytest
pytest-asyncio
ruff
jsonschema
openai
];

shellHook = ''
echo "MCPM development environment"
'';
};
}
);
}