Install
$ agentstack add skill-imtiazrayhan-agentscamp-library-cors-configurator ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Fix the specific, maddening case where a request works from curl or Postman but the browser blocks it with a CORS error. CORS is enforced by the browser, not the server — so the failure is always that the server isn't returning the response headers the browser requires for a cross-origin request. This skill reads the exact error, determines what the browser is asking for, and sets the minimal correct headers on the server, without disabling the protection or opening the API to every origin.
> [!NOTE] > CORS is a browser policy, not a server-side security control. Loosening it doesn't make your API safer or more dangerous to non-browser clients — but a wildcard-with-credentials or reflect-any-origin "fix" does expose authenticated users to malicious sites. Scope it to the origins you actually serve.
When to use this skill
- A browser
fetch/XHR fails with "No 'Access-Control-Allow-Origin' header" or "…does not pass access control check", but the same endpoint works from curl. - A request started failing after you added
Authorizationheaders, custom headers, cookies, or switched toPUT/DELETE(it became preflighted). - The preflight
OPTIONSrequest returns 404/405 or the wrong headers. - You set
Access-Control-Allow-Origin: *and it broke once credentials were involved.
Instructions
- Read the exact error and the request. Get the precise browser console message and the request's origin, method, and headers. The error text names what's missing (origin not allowed, method not allowed, header not allowed, credentials mismatch).
- Classify simple vs. preflighted. A simple request (GET/HEAD/POST with only safelisted headers and content types) needs only the right headers on the actual response. A preflighted request (custom headers,
Authorization, JSON body via non-safelisted content type, orPUT/PATCH/DELETE) first sends anOPTIONSpreflight — the server must answer that too. - Find where responses are produced. Locate the CORS middleware or the place response headers are set (framework CORS package, a reverse proxy, or manual header code). Confirm whether a proxy in front is adding or stripping CORS headers — duplicated or conflicting headers are a common cause.
- Set the origin correctly. For requests without credentials you may use
Access-Control-Allow-Origin: *. For requests with credentials, you must echo a specific allowlisted origin (never*), addAccess-Control-Allow-Credentials: true, and addVary: Originso caching stays correct. Check the incomingOriginagainst an explicit allowlist; don't reflect arbitrary origins. - Answer the preflight. Ensure
OPTIONSon the route returns204/200withAccess-Control-Allow-Methods(the methods you allow),Access-Control-Allow-Headers(echo or list the requested headers, e.g.Authorization, Content-Type), andAccess-Control-Max-Ageto cache the preflight and cut round-trips. Make sure the OPTIONS route isn't swallowed by auth middleware or a 404. - Prefer the framework's CORS support. Use the maintained CORS middleware (e.g.
corsfor Express,CORSMiddlewarefor FastAPI/Starlette, the framework's config) with an explicit origin allowlist rather than hand-writing headers on every route. - Verify with a real preflight. Reproduce the preflight from the shell and confirm the headers, then re-test in the browser:
``bash curl -i -X OPTIONS https://api.example.com/things \ -H "Origin: https://app.example.com" \ -H "Access-Control-Request-Method: PUT" \ -H "Access-Control-Request-Headers: authorization,content-type" ` The response must include Access-Control-Allow-Origin: https://app.example.com (or *` when credential-free), the allowed method, and the allowed headers.
Examples
An Express API called from https://app.example.com with a cookie session, currently sending Access-Control-Allow-Origin: * and failing once credentials were added:
import cors from "cors";
const allowedOrigins = ["https://app.example.com", "http://localhost:3000"];
app.use(
cors({
origin(origin, cb) {
// allow same-origin/non-browser (no Origin) and allowlisted origins
if (!origin || allowedOrigins.includes(origin)) return cb(null, true);
return cb(new Error("Not allowed by CORS"));
},
credentials: true, // echoes a specific origin, not *
methods: ["GET", "POST", "PUT", "DELETE"],
allowedHeaders: ["Authorization", "Content-Type"],
maxAge: 86400,
})
);
Report the outcome: what the browser was actually rejecting (origin / method / header / credentials), the exact headers now returned, that the OPTIONS preflight succeeds, and the allowlist you scoped it to — plus a note that origins are an explicit list, not a reflect-all.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: imtiazrayhan
- Source: imtiazrayhan/agentscamp-library
- License: MIT
- Homepage: https://agentscamp.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.