time-left-mcp-chatgpt
Provides a tool for ChatGPT that answers queries about time remaining in the day, week, month, and year with animated progress bars.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@time-left-mcp-chatgpthow much time is left in the day, week, and month?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

Time Left - ChatGPT App
A simple ChatGPT app that shows elegant progress bar visualizations of how much time is left in the current day, week, month, and year.
Features
Single Tool:
get_time_remaining- answers "how much time is left?" queriesVisual Progress Bars: Animated, color-coded bars for each time period
Light/Dark Theme: Automatically matches ChatGPT's theme
Real-time Calculation: Shows current elapsed/remaining percentages
Related MCP server: Time MCP Server
Quick Start
# Install dependencies
uv sync
# Run the server
uv run python server/main.pyThe server will start on http://localhost:8000.
Running Tests
# Install dev dependencies
uv sync --all-extras
# Run all tests
uv run pytest
# Run tests with verbose output
uv run pytest -v
# Run a specific test
uv run pytest server/test_main.py::TestCalculateTimeRemaining::test_noon_day_progress_is_fifty -vTesting with MCP Inspector
npx @modelcontextprotocol/inspector@latest http://localhost:8000/mcpNote: MCP Inspector tests the protocol but doesn't render the widget UI. Use web/preview.html to preview the widget locally.
Testing in ChatGPT (with Cloudflare Tunnel)
ChatGPT needs a public HTTPS URL to connect to your MCP server. Cloudflare Tunnel provides this for free without an account.
1. Install Cloudflare Tunnel (one-time)
# macOS
brew install cloudflared
# Or download from https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/2. Start the server and tunnel
# Terminal 1: Start the MCP server
uv run python server/main.py
# Terminal 2: Create a tunnel to localhost:8000
cloudflared tunnel --url http://localhost:8000Cloudflare will output a URL like:
Your quick Tunnel has been created! Visit it at:
https://random-words-here.trycloudflare.com3. Configure ChatGPT
Go to ChatGPT: Settings → Apps & Connectors → Advanced settings
Enable Developer mode
Click Create connector
Enter the Cloudflare URL with
/mcppath:https://random-words-here.trycloudflare.com/mcpSave the connector
4. Test it
Ask ChatGPT: "How much time is left?" or "What's my time progress?"
Local Widget Preview
To preview the widget without ChatGPT:
Start the server:
uv run python server/main.pyOpen
web/preview.htmlin a browser
This preview mocks the window.openai API that ChatGPT normally provides.
Project Structure
time-left-chatgpt-app/
├── server/
│ ├── main.py # MCP server with get_time_remaining tool
│ ├── test_main.py # Unit tests
│ └── requirements.txt # Legacy deps (use pyproject.toml instead)
├── web/
│ ├── widget.html # Progress bar visualization widget
│ └── preview.html # Local preview with mocked window.openai
├── pyproject.toml # Project config and dependencies
└── README.mdArchitecture
User Prompt → ChatGPT Model → MCP Tool Call → This Server → Response + Widget Metadata
↓
ChatGPT loads widget.html in iframe
↓
Widget reads from window.openai.toolOutputKey data flow:
structuredContentin server response →window.openai.toolOutputin widget_metacontains OpenAI directives only (openai/outputTemplate, etc.)
Production Deployment
For production deployment to Google Cloud Run (or similar), the server includes:
CSP Configuration
The tool metadata includes Content Security Policy settings required for ChatGPT app submission:
"openai/widgetCSP": {
"connect_domains": [], # Empty - widget doesn't make external API calls
"resource_domains": [], # Empty - all assets are inline
},
"openai/widgetDomain": WIDGET_DOMAINEnvironment Variables
Variable | Default | Description |
|
| Server port (Cloud Run sets this automatically) |
|
| Widget execution domain |
Deploying to Google Cloud Run
# Build and deploy
gcloud run deploy time-left \
--source . \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars WIDGET_DOMAIN=https://your-domain.com
# Map custom domain
gcloud run domain-mappings create \
--service time-left \
--domain your-domain.com \
--region us-central1App Submission Checklist
CSP configured (
openai/widgetCSP)Widget domain configured (
openai/widgetDomain)Organization verified on OpenAI Platform
Production URL deployed and accessible
Privacy policy URL prepared
Submit at: https://platform.openai.com/apps-manage
This server cannot be deployed
Maintenance
Related MCP Connectors
Time and date math for AI agents: Unix timestamp conversion, DST-correct time zone conversion, durations, epoch arithmetic, cron schedules, and holiday countdowns. Eight tools, no key.
Wall-clock awareness for LLM agents. Two tools: elapsed-time-between-turns + day rollover detection.
Deterministic time tools for AI agents: timezone conversion, business-day math, cron interpretation.
Current time, timezone conversion & date math for AI agents. On Cloudflare Workers.
Related MCP Servers
- AlicenseBqualityDmaintenanceGives large language models time awareness capabilities through various time-related functions including current time retrieval, timezone conversion, and relative time calculations.62,093 npmMIT
- AlicenseCqualityDmaintenanceProvides current time and date information with timezone support and multiple formatting options. Enables AI assistants to answer time-related queries in different timezones with detailed temporal information.23 npmMIT
- AlicenseAqualityNot gradedmaintenanceProvides AI assistants with real-time date, time, and timezone information, enabling them to access current temporal data, format dates, calculate day of week, and work with different timezones.47 npm-
- AlicenseAqualityDmaintenanceProvides time-related tools for LLM applications, enabling retrieval of current UTC time in ISO 8601 format and Unix timestamps.12,093 npmMIT