JiepengLab/dsh-neptune: Integrate Nippon Charging Station into DSH, check balance, view socket status, and reserve a 6 AM top-up

Introduction

The philosophy of DSH is “everything is a plugin.” Business systems like charging piles, which are narrow and legacy, are usually better suited as plugins rather than MCP servers. When writing an internet-connected plugin, you encounter a few unavoidable issues: where do credentials come from, how to approve things when things go wrong, who executes the scheduled tasks, and what to do if the vendor interface changes. JiepengLab/dsh-neptune is a charging plugin running on the user’s local machine, covering this entire chain. The author is JiepengLab, repository address https://github.com/JiepengLab/dsh-neptune, community directory page https://www.skillhub.cn/plugins/JiepengLab/dsh-neptune.

Below is an introduction to its capabilities, installation methods, usage flow, and several limitations that are easy to trip over.

What is this

One-sentence positioning: Control Neptune charging piles via chat—check balance and orders, see which sockets are free on a specific pile, set a next-day 6 AM top-up task, and automatically place an order when the time comes.

It solves this type of requirement: users plug in their car before bed and need to top up before 6 AM, but there might be no one guarding the computer in the early hours. The plugin runs in the user’s dsh process, and the scheduled top-up is executed by the host when the task hits the time by pushing it back into the session.

The plugin does not connect to a server but directly hits the vendor interface. openId is the pairing credential on the vendor side; it only exists in the plugin process memory, does not enter the model context, and is not persisted to disk.

Core Functions

Capabilities and corresponding tools are listed below. The plugin itself does not provide commands; you speak in chat, and the agent converts it into a tool call.

  1. neptune_pair: Get credentials. After authorization, the URL with openId goes into the local WeChat browsing history. The plugin fetches credentials from there, no need for users to type strings manually.
  2. neptune_status: Check balance, current order, charging hours, last order.
  3. neptune_sockets: Check occupancy status of each socket on a specific pile.
  4. neptune_charge_at: Create a DSH scheduled task; it is the only entry point for placing orders.
  5. neptune_charge: Execute the top-up when the time comes; only used when the host pushes that specific task.
  6. neptune_scan: Read pile number and socket number from a photo of the socket QR code.
  7. neptune_recipe: Write account info or order URL to the clipboard for use in scenarios like mobile automation.

Considering portability and stability, the plugin sets five gates before placing an order: already charging, outside charging hours, balance is 0, insufficient balance for pre-deduction, target socket not free. Also, unmanned top-up only tops up the order cut off by power outage at midnight—this is to avoid creating a bill when the car has already left.

Installation and Enablement

Installation command is as follows (PowerShell, belongs to DSH’s --profile installation method):

dsh plugin --profile desktop add github:JiepengLab/dsh-neptune

Compatibility: DSH >=0.2.2-rc.1 <0.3.0-0, Node 20 or higher, no build steps, the peer dependency declared in package.json is @deepseek-ai/dsh-tools >=0.0.1. License is MIT.

Installation does not equal usability. There are two things to do before the first use.

First, open the vendor link once in the computer WeChat, change the 8 digits at the end of the link to the user’s pile number (the number is printed on the pile):

https://szlzn.cn/wechat/wxscan/50959120

The authorization step can only be completed in WeChat; opening it in a regular browser will return “Please open the link in the WeChat client.” After authorization, the URL with openId enters WeChat browsing history, and the plugin fetches credentials from there. The landing page might not display because the vendor’s machine only uses http, and being called from an https page will be blocked by the browser—this is expected behavior.

Second, before starting a scheduled task, confirm that the computer can stay on until 6 AM; this will be discussed separately below.

Typical Usage

The following items are all from the phrasing table in the README and can be used directly to debug the plugin.

What you say What the plugin does
Check my charging status Balance, current order, charging hours, last order
Which sockets are free on that pile Occupancy status of individual sockets
Help me top up Create a DSH task, defaulting to the 6 AM order, auto-top up when time comes
Top up for tomorrow morning 6 AM Same as above; if no time is specified, set it to 06:05
Top up now Immediate top-up not available. Tell the user to charge when the time comes, or create a task for the nearest time
Took a photo of the QR code on the socket neptune_scan reads pile number and socket number, then sets a 06:05 task

Note that “Top up for tomorrow morning 6 AM” creates a host task. That task record is the approval credential: it specifies which pile and socket to top up, and the host pushes it back to the session at the appointed time. Approval happens when issued, not when executed; the call at the appointed time will not ask the user again. This will consume a tiny bit of tokens—the task at the appointed time will wake up the agent to execute the top-up.

What if the computer can’t stay on overnight

This plugin runs on the user’s computer. If the dorm loses power or shuts down, the 6 AM top-up won’t be executed. The suggestion in the README is: ask “Can this computer stay on until 6 AM?” before starting a scheduled task.

If not, there are two alternative routes, each with different costs.

  1. GitHub Actions. Fork the upstream repository, configure three secrets (NEPTUNE_OPEN_ID, NEPTUNE_AREA_ID, NEPTUNE_EMPLOYEE_ID), run every 30 minutes, from 02:47 to 06:07 Beijing Time. The cost is that credentials go into GitHub Secrets, requiring a GitHub account; it caps at balance, charging whatever the balance is, with the author’s cap set at 2 RMB.
  2. Mobile automation. The plugin writes the order URL to the clipboard; add an “Open URL” action in mobile automation, scheduled for 06:05. This URL has no gates: it doesn’t check socket occupancy, balance, or whether the order was cut off last night; the URL contains openId and cannot be pasted into chat. This is only safe when “the car is definitely parked in that socket” because the vendor doesn’t block placing orders on occupied sockets and will bill someone else’s car; on the account, the user pays.

Both routes require the user to modify the environment or configure the repository themselves; the README does not provide workflow files that can be copied directly.

Security Boundaries and Troubleshooting

The plugin’s credential processing rules are concentrated in the Security Boundaries section of the README; these points are more important to maintainers than functionality.

  1. openId only exists in plugin memory, not in model context, not returned to caller, not persisted. Some vendor interfaces echo openId; the plugin masks it at the layer reading the response, so the model sees only the masked string.
  2. neptune_recipe writes values to the clipboard; should ask the user before writing; values do not enter model context or chat. Windows clipboard history (Win+V) and clipboard synchronization will keep copies; once the value is in the clipboard, it is handed over to these mechanisms.
  3. Credential sources are environment variables, directory given by agent, and local WeChat browsing history. The plugin reads files itself; the agent’s permission is limited to listing directory names and cannot read the content of History files.
  4. The authorization credential is the host’s scheduled task; it is persisted by the host, visible on the task page, and can be deleted.

Troubleshooting for some high-frequency phenomena:

  1. “Vendor URL not found”: Follow the prompt to open the link in computer WeChat, or use a file tool to find the WeChat data directory and feed it to dir.
  2. “Not yet in charging hours”: The pile’s charging hours are 6:00 to 24:00; starting an order outside the window will be terminated by the vendor.
  3. “Target socket not free”: Someone is charging in that socket. The vendor doesn’t block it, but ending the order will clear the other person’s status.
  4. “System busy, please operate in 2 minutes!”: Vendor rate limiting, wait two minutes, do not retry by modifying fields.
  5. “Cannot identify which socket the scheduled task approves”: The host changed the format of the reminder body; say “Top up for tomorrow morning 6 AM” again and create a new task.
  6. “psh not found”: PowerShell 7 needs to be installed on Windows to write to the clipboard. The original text spells it this way; in actual troubleshooting, pwsh is what is looked for.
  7. Plugin not loaded, or agent says no such tools: Check the profile patch.

Applicable Scenarios and Notes

It is suitable for: car owners who plug in before bed and need to top up before 6 AM; and individual developers who want to automate their own charging scenarios. The plugin runs with the current dsh process permissions; before installing, you should read the source code and license (MIT) of JiepengLab/dsh-neptune once to confirm the alignment with your environment before enabling it.

It is not a tool that can be uninstalled at any time. If the vendor interface changes, it will fail, manifesting as the tool reporting “Vendor rejected request”; when the vendor changes billing brackets or order fields, you need to modify core/neptune-core.mjs and skills/neptune-resume/SKILL.md together. The author explicitly states in the README that the repository contains no one’s openId, and the author cannot obtain anyone’s credentials; everyone has to do the pairing themselves the first time. Do not send openId to others in configuration; that is equivalent to account credentials.

The plugin can be deleted. Deleting it just means losing this set of tools.

Summary

The value of dsh-neptune is not in quantity, but in fixing credential discovery, scheduled execution, and security gates in the trivial task of charging into a convention: credentials only in memory, write operations go through host tasks, and top-ups are uniformly scheduled for a specific time. If you want to know details, you can check CONTRIBUTING.md on GitHub (code location, local loading method, checks to run), or find it directly on the community directory page.

Directory page: https://www.skillhub.cn/plugins/JiepengLab/dsh-neptune
GitHub: https://github.com/JiepengLab/dsh-neptune

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye