Course planning app for Computer Science students at the University of Tübingen.
- Web app and public AI gateway: https://studyplaner.pages.dev
- Public AI/OpenAPI metadata: https://studyplaner.pages.dev/api/ai/meta
- Public MCP endpoint: https://studyplaner.pages.dev/mcp
- Privacy policy: https://studyplaner.pages.dev/privacy
The public AI integration is read-only and unauthenticated. It exposes course catalog search, course-reference resolution, and course detail lookup only. It does not expose StudyPlanner accounts, profiles, progress, semester plans, transcript data, passwords, browser tokens, OpenAI keys, or Anthropic keys.
-
Open ChatGPT → Explore GPTs → Create.
-
Configure → Actions → Import from URL.
-
Use this OpenAPI URL:
https://studyplaner.pages.dev/api/ai/openapi.json -
Authentication: None.
-
Privacy policy URL:
https://studyplaner.pages.dev/privacy -
Suggested GPT instructions:
You help Informatik students at the University of Tübingen find courses in the StudyPlanner catalog. Use searchCourses for course searches, resolveCourse when the user gives a course number, and getCourseDetail before making claims about a specific course. Always mention the course number and title when available. The integration is read-only and has no access to personal StudyPlanner data. -
Test prompts:
Welche Machine-Learning-Kurse gibt es?Zeig mir Details zum passendsten Kurs.Suche Seminare mit 6 ECTS im Sommer.
Use the public MCP endpoint:
https://studyplaner.pages.dev/mcp
If your Claude or MCP client supports remote MCP/connectors directly:
- Add a custom MCP connector/server.
- Name:
StudyPlanner. - URL:
https://studyplaner.pages.dev/mcp. - Authentication: None.
- Test with:
Nutze StudyPlanner und suche Kurse zu Machine Learning.
Use the exact /mcp URL. If Claude shows Dieser Konnektor hat keine Tools verfügbar, remove the connector and add it again after deployment; Claude can cache failed discovery attempts.
For Claude Desktop clients that still need a local bridge, add this to claude_desktop_config.json:
{
"mcpServers": {
"studyplanner": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://studyplaner.pages.dev/mcp"
]
}
}
}Then restart Claude Desktop. Older clients that ask for an SSE discovery URL can try:
https://studyplaner.pages.dev/sse
- Frontend: React 19, Vite, Tailwind CSS 4
- Backend: Python Cloudflare Worker
- Database: Cloudflare D1 / SQLite migrations
- Catalog imports: local Python tooling for ALMA data
npm run test:frontend
cd frontend
npm run lint
npm run buildWhen changing transcript parsing, also run:
cd frontend
npm run validate:transcripts- Active D1 binding:
DB - Active D1 database:
studyplanner-db(80ca9092-ddc6-454a-b04a-8ccae85ef2f5) - Previous test DB:
studyplaner-db-test(297f7a28-9069-431d-b989-49acf2537513)
Do not change the active database binding without explicit approval. Never commit AUTH_TOKEN_SECRET or generated secrets.
Useful docs:
docs/ai-integrations-setup.mddocs/cloudflare-runtime-config.mddocs/cloudflare-development.mddocs/authentication.mddocs/mobile-testing.mdbackend/README.md
Local development:
# terminal 1: frontend dev server (http://localhost:5173)
cd .\frontend\
npm run dev
# terminal 2: local backend Worker (http://localhost:8787)
cd .\backend\
npx wrangler devLocal public AI gateway smoke test:
# terminal 1: local backend Worker (http://localhost:8787)
cd .\backend\
npx wrangler dev
# terminal 2: local MCP Worker (http://localhost:8788)
cd .\integrations\studyplanner-mcp\
npx wrangler dev --port 8788
# terminal 3: local Pages gateway (http://localhost:8789)
cd .\frontend\
npm run build
npx wrangler pages dev dist --port 8789Then check:
curl http://localhost:8789/api/ai/meta
curl http://localhost:8789/privacy
curl -X POST http://localhost:8789/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Local DB refresh:
npm run db:verify-config
npm run db:migrate:local
python backend\scripts\export_sqlite_to_d1.py --data-out backend\.tmp\d1-seed.sql
cd backend
npx wrangler d1 execute DB --local --file .tmp\d1-seed.sqlFrontend checks:
npm run test:frontend
cd frontend
npm run lint
npm run build