You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"description": "MCP server that gives AI agents 8 security tools powered by a multi-stage detection pipeline. Scans prompts, responses, SQL, file writes, and web searches for injection attacks, PII leaks, and policy violations. Human-in-the-loop approval engine for enterprise compliance.",
agent_instruction: 'This approval requires dashboard authentication. You CANNOT approve or reject it from here. Direct the user to the Shrike Security dashboard to review and decide on this approval.',
294
+
user_message: 'This approval must be decided through the Shrike Security dashboard. Please log in to your dashboard to approve or reject this action.',
295
+
audit: {
296
+
scan_id: requestId,
297
+
timestamp: newDate().toISOString(),
298
+
},
299
+
request_id: requestId,
300
+
};
301
+
}
302
+
303
+
/**
304
+
* SHRIKE-401: Response when cooldown period hasn't elapsed yet.
agent_instruction: 'The approval is in a mandatory review cooldown period. Wait for the cooldown to expire, then ask the user if they want you to try submitting the decision again.',
316
+
user_message: `${serverMsg}. This cooldown ensures time for human review before any decision is accepted.`,
317
+
audit: {
318
+
scan_id: requestId,
319
+
timestamp: newDate().toISOString(),
320
+
},
321
+
request_id: requestId,
322
+
};
323
+
}
324
+
325
+
/**
326
+
* SHRIKE-401: Response when the same user tries to approve their own request.
guidance: 'Self-approval is not permitted. A different authorized user must review and decide on this approval.',
337
+
agent_instruction: 'Self-approval was blocked by the server. The user who triggered this scan cannot approve their own request. A different authorized user must decide. Inform the user of this requirement.',
338
+
user_message: 'Self-approval is not permitted. A different authorized user must review and decide on this approval through the Shrike dashboard.',
339
+
audit: {
340
+
scan_id: requestId,
341
+
timestamp: newDate().toISOString(),
342
+
},
343
+
request_id: requestId,
344
+
};
345
+
}
346
+
260
347
/**
261
348
* MCP Tool definition for check_approval
262
349
*/
@@ -272,9 +359,13 @@ POLL MODE (no decision parameter): Returns the current status of an approval.
272
359
- status="rejected": the action was denied. Return the rejection reason to the user and STOP. Do not retry.
273
360
- status="expired": the approval timed out without a decision. Inform the user and STOP.
274
361
275
-
DECIDE MODE (decision + justification parameters): Submits an approval decision.
276
-
- decision="approved": approve the pending action. Optionally include justification.
277
-
- decision="rejected": reject the pending action. Justification is recommended.
362
+
DECIDE MODE (decision + justification parameters): Submits a decision after the user explicitly instructs you to approve or reject.
363
+
- You MUST present the full approval context (threat type, severity, risk factors) to the user FIRST.
364
+
- You MUST wait for the user's EXPLICIT instruction (e.g., "approve it", "reject it") before calling with a decision.
365
+
- NEVER decide autonomously — always require explicit human instruction.
366
+
- High/critical severity approvals can ONLY be decided via the Shrike dashboard — the server will reject MCP-submitted decisions for these.
367
+
- Low/medium severity approvals have a 60-second cooldown after creation before decisions are accepted.
368
+
- If the server returns a 403 error, inform the user of the reason and direct them to the dashboard if needed.
278
369
279
370
IMPORTANT: Do NOT automatically poll in a loop. Approvals may take minutes to hours. Inform the user of the pending status and wait for them to ask you to check again.
280
371
@@ -291,7 +382,7 @@ ERROR HANDLING: If this tool returns an error, inform the user. Do NOT proceed w
291
382
decision: {
292
383
type: 'string',
293
384
enum: ['approved','rejected'],
294
-
description: 'Submit a decision (omit to poll status only)',
385
+
description: 'Submit a decision ONLY after the user explicitly instructs you to approve or reject. Never decide autonomously.',
0 commit comments