Tool get_web_url: devuelve URL correcta del proyecto para fetch/playwright

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jordan Diaz
2026-04-06 19:33:39 +00:00
parent 50ccc0e2a1
commit 30a62d9a1d
3 changed files with 43 additions and 3 deletions

View File

@@ -5,10 +5,9 @@ This is an Acai CMS website project. Follow these instructions when working with
## Environment ## Environment
- The site runs in Docker. The development URL is provided via `ACAI_WEB_URL` environment variable (e.g. `https://username_domain.forge.acaisuite.com/`) - The site runs in Docker. The development URL is provided via `ACAI_WEB_URL` environment variable (e.g. `https://username_domain.forge.acaisuite.com/`)
- **ALWAYS use `ACAI_WEB_URL` for fetch, Playwright, and any HTTP request.** This is the local development copy. - **Before using fetch or Playwright, call the `get_web_url` tool** to get the correct development URL. Never hardcode or guess URLs.
- **NEVER navigate to the production domain** (e.g. `keepsailing.es`, `tienda.com`). The production site is NOT your development environment. Only use the forge URL. - **NEVER navigate to the production domain** (e.g. `keepsailing.es`, `tienda.com`). The production site is NOT your development environment.
- **NEVER use localhost:8080** — that does not resolve in this environment. - **NEVER use localhost:8080** — that does not resolve in this environment.
- If `ACAI_WEB_URL` is not available, check the `.acai` file for `local_web_url`.
## Project Structure ## Project Structure

View File

@@ -0,0 +1,39 @@
import { z } from "zod";
import { withAuth, getSessionCredentials } from "../../auth/index.js";
import { handleToolError } from "../helpers/errorHandler.js";
import { withAuthParams } from "../helpers/authSchema.js";
export function registerGetWebUrlTool(server) {
server.tool(
"get_web_url",
`Get the correct URL for the project's development website. Always use this URL for fetch, Playwright, or any HTTP request to the site. Never guess or use production domains.`,
withAuthParams({}),
{ readOnlyHint: true, destructiveHint: false },
withAuth(async (_params, extra) => {
try {
const credentials = await getSessionCredentials(extra.sessionId);
if (!credentials || !credentials.web_url) {
return {
content: [{ type: "text", text: "Error: no web_url available. Run select_project first." }],
isError: true,
};
}
return {
content: [{
type: "text",
text: JSON.stringify({
web_url: credentials.web_url,
api_web_url: credentials.api_web_url || null,
website: credentials.website || null,
note: "Always use web_url for Playwright/fetch. Never use the production domain directly.",
})
}],
};
} catch (error) {
return handleToolError(error, "get_web_url", {});
}
})
);
}

View File

@@ -1,5 +1,7 @@
import { registerSaveProjectStylesTool } from "./saveStyles.js"; import { registerSaveProjectStylesTool } from "./saveStyles.js";
import { registerGetWebUrlTool } from "./getWebUrl.js";
export function registerProjectTools(server) { export function registerProjectTools(server) {
registerSaveProjectStylesTool(server); registerSaveProjectStylesTool(server);
registerGetWebUrlTool(server);
} }