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
File renamed without changes.
46 changes: 46 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Release

# Cut a release by pushing a version tag, e.g.:
# npm version patch && git push --follow-tags
#
# This builds the .mcpb desktop-extension bundle, creates the GitHub Release
# with the bundle attached, and publishes the package to npm.
#
# Requires an NPM_TOKEN repository secret (an npm automation token) for the
# publish step.
on:
push:
tags: ["v*"]

jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write # create the GitHub Release and upload assets
id-token: write # npm publish provenance
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
registry-url: https://registry.npmjs.org
cache: npm
- run: npm ci
- run: npm test
- run: npm run typecheck
- name: Build the .mcpb bundle
run: npm run pack:mcpb
- name: Create the GitHub Release
env:
GH_TOKEN: ${{ github.token }}
run: |
version="${GITHUB_REF_NAME#v}"
mv openmart-mcp-server.mcpb "openmart-mcp-server-${version}.mcpb"
gh release create "$GITHUB_REF_NAME" \
--title "$GITHUB_REF_NAME" \
--generate-notes \
"openmart-mcp-server-${version}.mcpb"
- name: Publish to npm
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
19 changes: 15 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,14 @@ The package exposes two binaries:

## CI Workflows

The CI, npm-publish, and Render-deploy workflow files are parked under
`docs/github-workflows/`. To activate them as real GitHub Actions, move them
into `.github/workflows/` and push from a credential that holds the GitHub
`workflow` OAuth scope (`gh auth refresh -s workflow`).
Two GitHub Actions workflows (`.github/workflows/`):

- `ci.yml` — runs tests, typecheck, and build on every push and pull request.
- `release.yml` — on a `v*` tag, builds the `.mcpb` bundle, creates the GitHub
Release with it attached, and publishes the package to npm.

`release.yml` needs an `NPM_TOKEN` repository secret (an npm automation token)
for the publish step.

## Shared Project Config

Expand Down Expand Up @@ -309,3 +313,10 @@ claude mcp add openmart -- env OPENMART_API_KEY="YOUR_OPENMART_API_KEY" node "$(
```

Then ask Claude, for example: `find 3 coffee shops in San Francisco with valid websites and get their owner emails`.

## Privacy

This server holds no data of its own. It forwards the search and enrichment
parameters you pass to the Openmart API, authenticated with your own API key,
and returns the response. Data handling is governed by the
[Openmart privacy policy](https://www.openmart.com/privacy-policy).
13 changes: 0 additions & 13 deletions docs/github-workflows/deploy-render.yml

This file was deleted.

25 changes: 0 additions & 25 deletions docs/github-workflows/publish-npm.yml

This file was deleted.

Binary file added icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,15 @@
"author": {
"name": "Openmart"
},
"homepage": "https://www.openmart.com",
"documentation": "https://github.com/OpenmartAI/openmart-mcp-server#readme",
"support": "https://github.com/OpenmartAI/openmart-mcp-server/issues",
"repository": {
"type": "git",
"url": "https://github.com/OpenmartAI/openmart-mcp-server"
},
"icon": "icon.png",
"privacy_policies": ["https://www.openmart.com/privacy-policy"],
"server": {
"type": "node",
"entry_point": "server/index.mjs",
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"test": "tsx --test test/**/*.test.ts",
"typecheck": "tsc --noEmit",
"pack:mcpb": "npm run build && node scripts/build-mcpb.mjs",
"version": "node scripts/sync-manifest-version.mjs && git add manifest.json",
"prepublishOnly": "npm test && npm run typecheck && npm run build"
},
"keywords": [
Expand Down
1 change: 1 addition & 0 deletions scripts/build-mcpb.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ await build({
});

copyFileSync("manifest.json", `${STAGE}/manifest.json`);
copyFileSync("icon.png", `${STAGE}/icon.png`);

execFileSync("npx", ["mcpb", "pack", STAGE, OUTPUT], { stdio: "inherit" });

Expand Down
18 changes: 18 additions & 0 deletions scripts/sync-manifest-version.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Keeps manifest.json's version in sync with package.json.
//
// Wired as the npm `version` lifecycle script, so `npm version <bump>` updates
// both files and stages manifest.json into the same release commit. Without
// this, a release would ship a .mcpb whose manifest version lags package.json.
import { readFileSync, writeFileSync } from "node:fs";

const VERSION_FIELD = /("version":\s*")[^"]*(")/;

const { version } = JSON.parse(readFileSync("package.json", "utf8"));
const manifest = readFileSync("manifest.json", "utf8");

if (!VERSION_FIELD.test(manifest)) {
throw new Error("sync-manifest-version: no version field found in manifest.json");
}

writeFileSync("manifest.json", manifest.replace(VERSION_FIELD, `$1${version}$2`));
console.log(`manifest.json version -> ${version}`);
Loading