Skip to main content

Template-based MCP server for remote job execution

Project description

Make-Vibe

This project is designed to allow an AI coding agent to tune a code while performing performance experiments on a remote HPC system. You will be able to edit and develop code locally in a vibe coding tool while compiling and running on remotely. This includes support for doing the execution on multiple nodes.

How It Works

  • Prepare the code you would like to work on with an associated Makefile.
  • Prepare a template for a jobscript on your remote machine.
  • An MCP server is dynamically generated from your Makefile and exposes the targets to your local LLM.
  • BATCH mode: Every time a tool call is made, the code is synchronized to the remote machine, a jobscript is generated and submitted, and the results of the jobscript are returned to the LLM.
  • PERSISTENT mode: Jobs are submitted to a preallocated compute node.
  • LOCAL mode: commands executed on the same computer as the vibe coding tool.

Quick Start

# Install
pip install -e .

The example/ includes:

  • nbody - turn a naive n-body code into an openmp parallel and optimized code.
  • matmul - optimize the compiler flags for a matrix multiplication code.
  • heat1d - MPI porting of a heat flow calculation.

Key Features

  • Automatic tool generation - Parses your Makefile, creates MCP tools for each target.
  • Remote execution - Built on remotemanager for job submission
  • Resource control - Specify MPI/OMP parameters per execution
  • Build / run variables - Pass compiler flags and other env vars (e.g., cflags="-O3")

Main Components

Makefile Target Definition:

...
# @env: CFLAGS - Compiler flags      ← Becomes MCP tool parameter
build:                               ← Becomes tool name: make_build
    $(CC) $(CFLAGS) -o app app.c     ← Actual command
...

Jobscript template:

...
#SBATCH --cpus-per-task=#OMP:default=1#      ← Becomes MCP tool parameter
#SBATCH --ntasks=1
module load system/fx700 FJSVstclanga/1.0.30.01
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

Template Configuration:

{
  ...
  "submitter": "sbatch",                          ← Jobscript submitter
  "template_params": {"MPI": "How many mpi..."},  ← Becomes tool parameters
  "template_file": "fx700.sh"                     ← Job script template file
  ...
}

Run Modes

The code can run in three different modes. PERSISTENT and BATCH are the modes this tool accomplishes. LOCAL could be useful if you want to enforce some fixed behavior / environment setting procedures for an LLM.

┌───────────────────────────────────────────────────────────────────────────┐
│          LOCAL: Developer's Machine (Claude Code + MCP Server)            │
│                                                                           │
│          ┌──────────────┐         ┌─────────────────┐                     │
│          │  Makefile    │────────>│   make-vibe     │                     │
│          │  (targets)   │  parsed │   MCP Server    │                     │
│          │              │         │                 │                     │
│          │ • build      │         │  Auto-generates │                     │
│          │ • run        │         │  MCP tools from │                     │
│          │ • run-large  │         │  targets        │                     │
│          └──────────────┘         └─────────────────┘                     │
│                 +                          |                              │
│          ┌──────────────┐                  |                              │
│          │  Template    │                  v                              │
│          │  config.json │         ┌─────────────────┐                     │
│          │  template.sh │────────>│  Tool Call      │                     │
│          │              │         │  + Parameters   │                     │
│          │ • host       │  fills  │  (MPI=4, etc.)  │                     │
│          │ • submitter  │  params └─────────────────┘                     │
│          │ • parameters │                  |                              │
│          └──────────────┘                  | + rsync                      │
└────────────────────────────────────|──────────────────────────────────────┘
                                     |
              ┌──────────────────────┼────────────────────────┐
              |                      |                        |
              v                      v                        v

┌──────────────────────┐  ┌──────────────────────┐  ┌──────────────────────┐
│  MODE 1: LOCAL       │  │  MODE 2: PERSISTENT  │  │  MODE 3: BATCH       │
│  submitter: "bash"   │  │  submitter: "srun    │  │  submitter: "sbatch" │
│                      │  │    --jobid=XXX bash" │  │                      │
├──────────────────────┤  ├──────────────────────┤  ├──────────────────────┤
│                      │  │                      │  │                      │
│  ┌────────────────┐  │  │  ┌────────────────┐  │  │  ┌────────────────┐  │
│  │ Local Machine  │  │  │  │ Pre-allocated  │  │  │  │  Job Queue     │  │
│  │                │  │  │  │ Compute Node   │  │  │  │                │  │
│  │  Execute       │  │  │  │                │  │  │  │ Job 1→[SLURM]  │  │
│  │  directly      │  │  │  │  [Active job]  │  │  │  │ Job 2→[SLURM]  │  │
│  │                │  │  │  │   Submit to    │  │  │  │ Job 3→[SLURM]  │  │
│  │  bash script   │  │  │  │   this job     │  │  │  │                │  │
│  │                │  │  │  │                │  │  │  │  [Each call =  │  │
│  └────────────────┘  │  │  │ [Job keeps     │  │  │  │  New job]      │  │
│                      │  │  │  running]      │  │  │  │                │  │
│                      │  │  └────────────────┘  │  │  └────────────────┘  │
├──────────────────────┤  ├──────────────────────┤  ├──────────────────────┤
│ ✓ No queue           │  │ ✓ No queue wait      │  │ ✓ Fair scheduling    │
│ ✓ Low latency        │  │ ✓ Rapid iteration    │  │ ✓ Long runs          │
│ ✓ Good for testing   │  │ ✓ Interactive feel   │  │ ✓ Independent runs   │
│                      │  │                      │  │ ✓ Cluster policies   │
│ ✗ Fixed resources    │  │ ✗ Must pre-allocate  │  │                      │
│ ✗ Must run vibe tool │  │ ✗ Fixed resource     │  │ ✗ Queue delays       │
│   on a compute node  │  │ ✗ size (#nodes)      │  │ ✗ Slower iteration   │
└──────────────────────┘  └──────────────────────┘  └──────────────────────┘

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

make_vibe-0.1.1.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

make_vibe-0.1.1-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file make_vibe-0.1.1.tar.gz.

File metadata

  • Download URL: make_vibe-0.1.1.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for make_vibe-0.1.1.tar.gz
Algorithm Hash digest
SHA256 afce439523e5a8c1dd1ff4e84909d4db21f2d29c9281dc58ddf449bd32ed53d4
MD5 e053cd8b3ff7b3a28ffa3466afa471c8
BLAKE2b-256 79773f00a32e1d377b01fafaf798224af53ad41f863704f950e261750f7f4f10

See more details on using hashes here.

File details

Details for the file make_vibe-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: make_vibe-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 10.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for make_vibe-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b6f7046bb1b5f9faf2366de2edf22ea03c4d1050bbcfa59835d71d2b0617472
MD5 215f5f4e44e916617903e46601d5b251
BLAKE2b-256 25d1fdc519fd30ebe671ef001b450b438ed0b0b34c8b1f9cf4c8317fe594f0d1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page