feat: fix NocoBase endpoint to justconn.top

This commit is contained in:
nac
2026-08-15 06:03:08 +00:00
parent 6129963256
commit c40e456d7c
12 changed files with 64 additions and 75 deletions
+13 -12
View File
@@ -6,7 +6,7 @@ import { loadConfig } from "./config.js";
import {
credentialsPath,
loadCredentials,
normalizeApiBaseUrl,
NOCOBASE_API_BASE_URL,
readHidden,
saveCredentials,
} from "./credentials.js";
@@ -18,7 +18,6 @@ import { VERSION } from "./version.js";
interface ParsedArgs {
command: "serve" | "setup" | "doctor" | "client-config" | "help" | "version";
apiBaseUrl?: string;
config?: string;
enableWrites: boolean;
json: boolean;
@@ -80,27 +79,29 @@ export function createRuntime(configPath: string): {
}
async function setup(args: ParsedArgs): Promise<void> {
if (!args.apiBaseUrl) throw new Error("setup requires --api-base-url <https://nocobase.example>");
if (!process.stdin.isTTY || !process.stderr.isTTY) {
throw new Error("Setup requires a user-controlled local terminal; no files were changed");
}
const apiBaseUrl = normalizeApiBaseUrl(args.apiBaseUrl);
process.stderr.write(
"Create a revocable personal Authorize Key in NocoBase for your own business account.\n" +
`This MCP connects only to ${NOCOBASE_API_BASE_URL}.\n` +
"Create a revocable personal Authorize Key in NocoBase for your own business account.\n" +
"Do not paste the Key into Agent chat. Enter it only in the hidden prompt below.\n",
);
const authorizeKey = (await readHidden("Personal NocoBase Authorize Key: ")).trim();
if (!authorizeKey) throw new Error("Authorize Key must not be blank; no files were changed");
const verificationClient = new NocoBaseClient(() => ({ apiBaseUrl, authorizeKey }));
const verificationClient = new NocoBaseClient(() => ({
apiBaseUrl: NOCOBASE_API_BASE_URL,
authorizeKey,
}));
await verificationClient.verifyCredentials();
const configPath = ensureConfig(args.config);
saveCredentials({ apiBaseUrl, authorizeKey });
saveCredentials({ authorizeKey });
const runtime = createRuntime(configPath);
const health = await runtime.crm.crmHealth();
printResult(
{
ok: true,
apiBaseUrl,
apiBaseUrl: NOCOBASE_API_BASE_URL,
credentialsPath: credentialsPath(),
keyExposure: "private-tty-and-0600-local-file-only",
configPath,
@@ -165,11 +166,10 @@ function parseArgs(argv: string[]): ParsedArgs {
else if (flag === "--version" || flag === "-v") parsed.command = "version";
else if (flag === "--enable-writes") parsed.enableWrites = true;
else if (flag === "--json") parsed.json = true;
else if (flag === "--api-base-url" || flag === "--config") {
else if (flag === "--config") {
const value = argv[index + 1];
if (!value || value.startsWith("-")) throw new Error(`${flag} requires a value`);
if (flag === "--api-base-url") parsed.apiBaseUrl = value;
else parsed.config = value;
parsed.config = value;
index += 1;
} else throw new Error(`Unknown option: ${flag}`);
index += 1;
@@ -185,11 +185,12 @@ function helpText(): string {
return `NocoBase CRM MCP ${VERSION}
Usage:
nocobase-crm-mcp setup --api-base-url <url> [--config <path>] [--json]
nocobase-crm-mcp setup [--config <path>] [--json]
nocobase-crm-mcp [serve] [--config <path>] [--enable-writes]
nocobase-crm-mcp doctor [--config <path>] [--json]
nocobase-crm-mcp client-config [--config <path>] [--enable-writes] [--json]
The NocoBase API endpoint is fixed to ${NOCOBASE_API_BASE_URL}.
The setup command accepts the personal Authorize Key only through a hidden local TTY prompt.
The default stdio server is read-only.
`;