senegal-mohebs-tlm-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP listen port (only used in HTTP mode). | 8080 |
| KG_SOURCE | No | Where curriculum + KG reads pull from: bundle (default) or firestore. | bundle |
| TLM_GRADE | No | Pre-select the active grade at startup, e.g., ci. | |
| PUBLIC_URL | No | This server's public base URL (required when auth is on). | |
| TLM_SUBJECT | No | Pre-select the active subject at startup, e.g., maths. | |
| SUPABASE_URL | No | Supabase project URL, e.g., https://<ref>.supabase.co (enables OAuth). | |
| TLM_SOURCES_DIR | No | Relocate the sources root directory. | ./sources |
| TLM_BUCKET_PREFIX | No | Put everything under a prefix in the bucket, e.g., pilot. | |
| ALLOW_UNAUTHENTICATED | No | Set to '1' to run without authentication (local testing only). | |
| FIREBASE_STORAGE_BUCKET | Yes | The Firebase Storage bucket name, e.g., your-project.appspot.com. | |
| SERVICE_ACCOUNT_KEY_JSON | No | Content of your Firebase service-account JSON (alternative to SERVICE_ACCOUNT_KEY_PATH). | |
| SERVICE_ACCOUNT_KEY_PATH | No | Path to your Firebase service-account JSON (used for auth and for signing upload URLs). | |
| TLM_DOMAIN_NEIGHBORHOOD_K | No | How many chapters on each side count as a chapter's neighborhood for example-domain variety. | 3 |
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| set_contextA | Choose the grade (e.g. 'ci') and subject (e.g. 'maths') to work on. This selects which local sources load and which Firebase namespace documents and history live under, and MUST be set before any other tool. If you don't know which to use, call get_context to list the installed options, then ask the user. |
| get_contextA | Return the currently selected grade/subject (null if none is set yet) and every installed grade/subject option. Use this to discover what's available, then set_context. |
| list_unitsB | All top-level curriculum units for the active subject (for maths: chapters — number, title, domain). Numbering may skip. |
| get_curriculumA | The curriculum slice for one unit (for maths: a chapter's ordered lessons with components and tasks, the bilan lesson, and cross-unit progression). 'unit' is the unit's scope value (maths: the chapter number). |
| get_terminologyA | Search the MOHEBS French/Wolof terminology used as the fallback when the KG lacks a term's wording. Returns [] if nothing matches — then say the wording is missing rather than invent it. |
| terminology_sectionsA | List terminology sections and entry counts. |
| get_promptA | Return the generation prompt for one of the active subject's deliverables (its DeliverableSpec.promptFile). 'deliverable' is a deliverable key — for maths, 'manual' or 'lessons'. |
| get_generation_contextC | One call to load before generating: curriculum for the unit, plus subject-specific context (for maths: established characters, a fresh example-domain suggestion, and — for the teacher guide — the manual to build on). 'unit' is the scope value (maths: chapter number); 'deliverable' is a deliverable key (maths: 'manual' or 'lessons'). |
| suggest_fresh_domainA | Suggest an unused (or least-recently-used) example domain so chapters rotate object families. Maths-specific (example-domain rotation). |
| domain_usageB | Which example domains have been used, and in which chapters. Maths-specific (example-domain rotation). |
| reconcileA | List the documents in Firebase Storage and diff against history: tracked docs, UNTRACKED docs needing ingestion, entries dropped because their object is gone, and duplicate resolutions. |
| list_documentsC | Current history: one canonical entry per document, with its known content. |
| create_upload_urlA | Get a short-lived signed URL to upload a generated .docx to the bucket. Upload with an HTTP PUT, Content-Type application/vnd.openxmlformats-officedocument.wordprocessingml.document. relPath is like 'chapitre_05/Manuel - Chapitre 5.docx'. After uploading, call log_generation with the same relPath. REQUIRES CONFIRMATION: called without confirm:true it only returns a needsConfirmation notice — ask the user to approve the upload, then call again with confirm:true. |
| create_download_urlA | Get a short-lived signed URL to download an EXISTING .docx from the bucket with an HTTP GET (no auth header needed). relPath is documents-relative, like 'chapitre_05/Manuel - Chapitre 5.docx' — the same path used by create_upload_url and get_document_text. Use this to fetch the original binary file (with its images and formatting intact) so you can edit it and re-upload via create_upload_url. Returns { url, objectKey, expiresAt, exists }; exists is false when there is no such object. |
| get_document_textA | Extract the plain text of a document in the bucket (by its documents-relative path) so you can read an UNTRACKED document and then record its content. When identifying characters, read the WHOLE document — characters appear in the opening scene AND in the activities and bilan, not only the amorce. |
| record_document_contentA | After reading an UNTRACKED document's text, store the structured content you extracted into history so it is never re-parsed. For characters, include every one found ANYWHERE in the document (opening scene and activities/bilan), each with details like {name, type}. The object must already be in the bucket. 'unit' is the scope value (maths: chapter number); 'deliverable' is a deliverable key (maths: 'manual' or 'lessons'). REQUIRES CONFIRMATION: called without confirm:true it only returns a needsConfirmation notice — ask the user to approve writing to history, then call again with confirm:true. |
| log_generationA | Call after uploading a generated .docx to the bucket (via create_upload_url). Reads the object's hash from storage and records what you produced so it feeds future consistency + variety. Log each character with details like {name, type} (e.g. {name:'Awa', type:'child'}), not just the name. No local file needed. 'unit' is the scope value (maths: chapter number); 'deliverable' is a deliverable key (maths: 'manual' or 'lessons'). REQUIRES CONFIRMATION: called without confirm:true it only returns a needsConfirmation notice — ask the user to approve writing to history, then call again with confirm:true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/IDinsight/senegal-mohebs-tlm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server