
petromcp
io.github.ameyxdPublished by GitHub account ameyxdv0.8.1Updated Oct 24, 2026
Local-first MCP server: read LAS well logs and DLIS files from your own disk.
Overview
Reads LAS well logs and DLIS petroleum files from local disk, summarizing curves, comparing wells, and converting units.
- What you can do
- petromcp wraps the open-source lasio and dlisio parsers and exposes them as MCP tools. Tools include read_las_file for header summaries, summarize_las_curves for per-curve statistics, read_las_curve for depths and values with a sampling cap, compare_well_logs for common curves, depth overlap and unit consistency, convert_units and list_supported_units, plus read_dlis_file, list_dlis_channels and read_dlis_channel. A qc_a_well_log prompt walks through a standard quality-control pass.
- When to use it
- Useful when well-log files cannot legally be uploaded to a cloud service and you want to question them in conversation instead of copying curve values into chat. It suits LAS and DLIS quality control, comparing two wells, and unit conversion.
- Requirements
- Runs locally over stdio as a PyPI package (petroleum-mcp) launched with uvx; requires Python 3.10+ and uv. No accounts, API keys, or environment variables are declared. Directories must be explicitly allowlisted via the config CLI before any file can be read, and the host must be restarted after editing the allowlist.
Installation
In SourceWeft
- Open petromcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
petromcp
Read well logs with Claude without the data ever leaving your machine.
petromcp is an MCP server for petroleum data formats, built for teams whose files legally cannot be uploaded to a cloud service. No telemetry, no phone-home, no automatic updates, and a default-deny path allowlist that refuses to open anything you have not explicitly permitted. LAS today; DLIS, SEG-Y, and pump cards next.
If you can upload your data somewhere, you have more options than this. If you can't, this was written for you.
What this gives you
LLM hosts cannot read binary or semi-structured petroleum formats. petromcp
wraps the established open-source parsers — lasio and dlisio today, with
segyio queued for a later slice — and exposes them as MCP tools, so
you can have a conversation with your data instead of copy-pasting curve
values into chat.
What "local-first" means here, concretely
Not a posture. Four things you can verify in the source:
- Default deny. A fresh install can read nothing. Access is granted per directory, and every tool routes through one validator that resolves symlinks before checking, so a link inside an allowed directory cannot reach outside it. There is no environment variable that widens the allowlist and no tool that changes it at runtime.
- No network, declared. petromcp opens no outbound connections. All five
tools ship
openWorldHint: falseandreadOnlyHint: true, so your host can verify that claim rather than take it. - An audit trail. Every tool call is logged with a timestamp, the tool name, and the resolved path.
- Bounded output. Curve reads are capped and report
downsampledandoriginal_count, so a 20,000-point log cannot silently dump into a context window.
The threat model, and what does not count as a vulnerability, are in SECURITY.md. Read docs/DATA_PRIVACY.md before pointing this at real data — it is authoritative, and if the code contradicts it the code is the bug.
Install
Requires Python 3.10+ and uv.
Add petromcp to your MCP host's config — no clone, no build:
On macOS that file is
~/Library/Application Support/Claude/claude_desktop_config.json. Restart
the host afterwards. macOS notes and troubleshooting:
docs/INSTALL.md.
To work on petromcp rather than just use it:
Configure
By default petromcp can read nothing. Tell it which directories are fair game:
Or, if you want to try it without your own data, generate the synthetic sample from a checkout and allowlist that:
Restart your MCP host after editing the allowlist — it is read once at startup.
Use
Open a new conversation and ask, in plain language:
Claude picks the right tool, reads the file through petromcp, and answers.
Worked examples, with real tool output rather than prose:
- QC a well log — finds a planted density gap, a washout, and a gamma ray spike
- Compare two wells — depth overlap, a missing curve, and a unit mismatch that is invisible in one file
- Unit conversion
- Read a DLIS file — logical files, frames, and what happens when a channel name is ambiguous
Every value in those documents is generated by calling the tools; CI fails if they drift.
Tools
Every tool is read-only and opens no network connection, and declares that in its MCP annotations. Full reference: docs/TOOLS_REFERENCE.md.
DLIS files hold several logging runs, each with several frames, so a channel
name is unique only within a frame. read_dlis_channel refuses an ambiguous
name and lists the candidates rather than guessing, because the values differ.
SEG-Y and pump card support land in subsequent releases.
Status
v0.7 ships the LAS and DLIS slices, a comparison tool, a units utility, and config-management CLI subcommands. The remaining formats are tracked in SPEC_petromcp.md. The non-goals list there is real; read it before filing feature requests.
Release history: CHANGELOG.md. Security policy and threat model: SECURITY.md.
License
MIT.
mcp-name: io.github.ameyxd/petromcp
Built by Amey Ambade. I write about AI systems in industries where the data can't leave the building, at writing.heyamey.com.
Source: README.md at commit 653971f
Tools
0Version history
1- v0.8.1LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts