sjtu_text
Submit text prompts to SJTU's OpenAI-compatible API for completions. Configure model, temperature, and system prompt to tailor responses.
Instructions
Run a plain text task against the SJTU OpenAI-compatible API.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| model | No | ||
| system_prompt | No | ||
| temperature | No | ||
| max_tokens | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- src/sjtu_mcp/server.py:68-83 (handler)The main handler for the 'sjtu_text' MCP tool. It accepts a prompt, optional model/system_prompt/temperature/max_tokens, builds text messages via _build_text_messages, calls the SJTU chat API via client.chat, and extracts the response text via _extract_text.
@mcp.tool() async def sjtu_text( prompt: str, model: str | None = None, system_prompt: str | None = None, temperature: float = 0.2, max_tokens: int | None = None, ) -> str: """Run a plain text task against the SJTU OpenAI-compatible API.""" response = await client.chat( model=model or settings.default_text_model, messages=_build_text_messages(prompt, system_prompt), temperature=temperature, max_tokens=max_tokens, ) return _extract_text(response) - src/sjtu_mcp/server.py:68-68 (registration)The tool is registered with the MCP framework via the @mcp.tool() decorator on line 62 (for sjtu_models) and line 68 (for sjtu_text). The 'FastMCP' instance named 'mcp' is created on line 12 and the decorator registers the function as an MCP tool.
@mcp.tool() - src/sjtu_mcp/server.py:15-29 (helper)Helper function _extract_text parses the API response dict to extract the text content from the first choice's message. Handles both plain string and list-of-content-blocks formats.
def _extract_text(response: dict[str, Any]) -> str: choices = response.get("choices", []) if not choices: return "No choices returned." message = choices[0].get("message", {}) content = message.get("content", "") if isinstance(content, str): return content if isinstance(content, list): chunks: list[str] = [] for item in content: if isinstance(item, dict) and item.get("type") == "text": chunks.append(str(item.get("text", ""))) return "\n".join(chunk for chunk in chunks if chunk) return str(content) - src/sjtu_mcp/server.py:32-37 (helper)Helper function _build_text_messages constructs the messages list for a plain text chat completion request, optionally including a system prompt.
def _build_text_messages(prompt: str, system_prompt: str | None) -> list[dict[str, Any]]: messages: list[dict[str, Any]] = [] if system_prompt: messages.append({"role": "system", "content": system_prompt}) messages.append({"role": "user", "content": prompt}) return messages - src/sjtu_mcp/server.py:70-77 (schema)The schema for sjtu_text is defined implicitly through the function signature parameters: prompt (str, required), model (str | None), system_prompt (str | None), temperature (float, default 0.2), max_tokens (int | None). The return type is str.
prompt: str, model: str | None = None, system_prompt: str | None = None, temperature: float = 0.2, max_tokens: int | None = None, ) -> str: """Run a plain text task against the SJTU OpenAI-compatible API.""" response = await client.chat(