# Verifies Gemini CLI uses the MCP time server to answer a time prompt and the dashboard records the call.
name: "Gemini CLI time prompt test"
image: us-central1-docker.pkg.dev/prj-common-442813/mcpx/mcpx:v0.2.17-66354a7
configMount: config
env:
GEMINI_API_KEY: "${GEMINI_API_KEY}"
aiAgent:
type: gemini-cli
transport: http
scope: project
serverName: mcpx
url: http://127.0.0.1:9000/mcp
headers:
x-lunar-consumer-tag: Gemini CLI
verboseOutput: false
dependentContainers: []
steps:
- name: Prompt Gemini CLI for current Jerusalem time
kind: agent
toolName: gemini-cli/prompt
payload:
args:
- --output-format
- json
- --approval-mode
- yolo
- --allowed-mcp-server-names
- mcpx
- --allowed-tools
- time__get_current_time
- -p
- >-
Use the available MCP time tool to fetch the current time in Jerusalem.
Respond exactly in the format "Jerusalem time: HH:MM (TZ)".
expected:
mode: json-schema
value:
type: object
required:
- response
properties:
response:
type: string
pattern: "^Jerusalem time: \\d{1,2}:\\d{2} \\([^)]*\\)$"
- name: Load Control-Plane UI
kind: browser
toolName: browser_navigate
payload:
url: http://localhost:5173
expected:
mode: regex
value: "Ran Playwright code"
- name: Wait for Total Requests label
kind: browser
toolName: browser_wait_for
payload:
text: "Total Requests"
time: 15
expected:
mode: contains
value: "Waited for Total Requests"
- name: Verify Total Requests equals 1
kind: browser
toolName: browser_evaluate
payload:
function: |
() => new Promise((resolve) => {
const start = Date.now();
const poll = () => {
const text = document.body?.innerText || '';
const match = text.match(/Total Requests\s*(\d+)/i);
const value = match ? Number(match[1]) : 0;
if (value > 0 || Date.now() - start > 15000) {
resolve(value);
} else {
setTimeout(poll, 500);
}
};
poll();
})
expected:
mode: regex
value: "\"?1\"?"
- name: Verify Last Activity timestamp
kind: browser
toolName: browser_evaluate
payload:
function: |
() => {
const card = Array.from(document.querySelectorAll('div,section,article'))
.find((el) => /Last Activity/i.test(el.textContent || ''));
if (!card) {
return 'last-activity-card-missing';
}
const text = (card.textContent || '').replace(/\s+/g, ' ').trim();
if (/\b[A-Za-z]{3,}\s+\d{1,2},\s+\d{2}:\d{2}\b/.test(text)) {
return 'last-activity-timestamp';
}
if (/\d{1,2}:\d{2}/.test(text)) {
return 'last-activity-time';
}
return `last-activity-unexpected:${text}`;
}
expected:
mode: regex
value: "last-activity-(timestamp|time)"