83 lines
2.2 KiB
Markdown
83 lines
2.2 KiB
Markdown
# Sample
|
||
|
||
This is a JavaScript example for an MCP Server
|
||
|
||
Here’s an example of tool registration where we register a tool that makes a mock call to an LLM:
|
||
|
||
```javascript
|
||
this.mcpServer.tool(
|
||
'completion',
|
||
{
|
||
model: z.string(),
|
||
prompt: z.string(),
|
||
options: z.object({
|
||
temperature: z.number().optional(),
|
||
max_tokens: z.number().optional(),
|
||
stream: z.boolean().optional()
|
||
}).optional()
|
||
},
|
||
async ({ model, prompt, options }) => {
|
||
console.log(`Processing completion request for model: ${model}`);
|
||
|
||
// Validate model
|
||
if (!this.models.includes(model)) {
|
||
throw new Error(`Model ${model} not supported`);
|
||
}
|
||
|
||
// Emit event for monitoring/metrics
|
||
this.events.emit('request', {
|
||
type: 'completion',
|
||
model,
|
||
timestamp: new Date()
|
||
});
|
||
|
||
// In a real implementation, this would call an AI model
|
||
// Here we just echo back parts of the request with a mock response
|
||
const response = {
|
||
id: `mcp-resp-${Date.now()}`,
|
||
model,
|
||
text: `This is a response to: ${prompt.substring(0, 30)}...`,
|
||
usage: {
|
||
promptTokens: prompt.split(' ').length,
|
||
completionTokens: 20,
|
||
totalTokens: prompt.split(' ').length + 20
|
||
}
|
||
};
|
||
|
||
// Simulate network delay
|
||
await new Promise(resolve => setTimeout(resolve, 500));
|
||
|
||
// Emit completion event
|
||
this.events.emit('completion', {
|
||
model,
|
||
timestamp: new Date()
|
||
});
|
||
|
||
return {
|
||
content: [
|
||
{
|
||
type: 'text',
|
||
text: JSON.stringify(response)
|
||
}
|
||
]
|
||
};
|
||
}
|
||
);
|
||
```
|
||
|
||
## Install
|
||
|
||
Run the following command:
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
## Run
|
||
|
||
```bash
|
||
npm start
|
||
```
|
||
|
||
**Disclaimer**:
|
||
This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. |