Merge pull request #1117 from nagisa77/codex/add-daily-weather-lookup-for-cities

Integrate weather MCP into Coffee Bot
This commit is contained in:
Tim
2025-10-28 18:43:15 +08:00
committed by GitHub
2 changed files with 39 additions and 15 deletions
+32 -10
View File
@@ -4,20 +4,25 @@ export type WorkflowInput = { input_as_text: string };
export abstract class BotFather { export abstract class BotFather {
protected readonly allowedMcpTools = [ protected readonly allowedMcpTools = [
"search", // openisle MCP tools
"create_post", "search", // 用于搜索帖子、内容等
"reply_to_post", "create_post", // 创建新帖子
"reply_to_comment", "reply_to_post", // 回复帖子
"recent_posts", "reply_to_comment", // 回复评论
"get_post", "recent_posts", // 获取最新帖子
"list_unread_messages", "get_post", // 获取特定帖子的详细信息
"mark_notifications_read", "list_unread_messages", // 列出未读消息或通知
"create_post", "mark_notifications_read", // 标记通知为已读
// third-party MCP tools
"weather_mcp_server", // 天气 MCP 工具
]; ];
protected readonly openisleToken = (process.env.OPENISLE_TOKEN ?? "").trim(); protected readonly openisleToken = (process.env.OPENISLE_TOKEN ?? "").trim();
protected readonly weatherToken = (process.env.APIFY_API_TOKEN ?? "").trim();
protected readonly mcp = this.createHostedMcpTool(); protected readonly mcp = this.createHostedMcpTool();
protected readonly weatherMcp = this.createWeatherMcpTool();
protected readonly agent: Agent; protected readonly agent: Agent;
constructor(protected readonly name: string) { constructor(protected readonly name: string) {
@@ -33,10 +38,16 @@ export abstract class BotFather {
: "🔓 OPENISLE_TOKEN not set; authenticated MCP tools may be unavailable." : "🔓 OPENISLE_TOKEN not set; authenticated MCP tools may be unavailable."
); );
console.log(
this.weatherToken
? "☁️ APIFY_API_TOKEN detected; weather MCP server will be available."
: "🌥️ APIFY_API_TOKEN not set; weather updates will be unavailable."
);
this.agent = new Agent({ this.agent = new Agent({
name: this.name, name: this.name,
instructions: this.buildInstructions(), instructions: this.buildInstructions(),
tools: [this.mcp], tools: [this.mcp, this.weatherMcp],
model: "gpt-4o", model: "gpt-4o",
modelSettings: { modelSettings: {
temperature: 0.7, temperature: 0.7,
@@ -84,6 +95,17 @@ export abstract class BotFather {
}); });
} }
private createWeatherMcpTool(): ReturnType<typeof hostedMcpTool> {
return hostedMcpTool({
serverLabel: "weather_mcp_server",
serverUrl: "https://jiri-spilka--weather-mcp-server.apify.actor/mcp",
requireApproval: "never",
headers: {
Authorization: `Bearer ${this.weatherToken || ""}`,
},
});
}
protected getAdditionalInstructions(): string[] { protected getAdditionalInstructions(): string[] {
return []; return [];
} }
+7 -5
View File
@@ -14,6 +14,7 @@ class CoffeeBot extends BotFather {
"正文需亲切友好,简洁明了,鼓励社区成员互动。", "正文需亲切友好,简洁明了,鼓励社区成员互动。",
"开奖说明需明确告知中奖者需私聊站长 @nagisa 领取奖励。", "开奖说明需明确告知中奖者需私聊站长 @nagisa 领取奖励。",
"确保只发布一个帖子,避免重复调用 create_post。", "确保只发布一个帖子,避免重复调用 create_post。",
"使用标签为 weather_mcp_server 的 MCP 工具获取北京、上海、广州、深圳当天的天气信息,并把结果写入早安问候之后。",
]; ];
} }
@@ -24,19 +25,20 @@ class CoffeeBot extends BotFather {
drawTime.setHours(23, 0, 0, 0); drawTime.setHours(23, 0, 0, 0);
return ` return `
请立即在 https://www.open-isle.com 使用 create_post 发表一篇全新帖子,遵循以下要求: 请立即在 https://www.open-isle.com 使用 create_post 发表一篇帖子,遵循以下要求:
1. 标题固定为「大家星期${weekday}早安--抽一杯咖啡」。 1. 标题固定为「大家星期${weekday}早安--抽一杯咖啡」。
2. 正文包含: 2. 正文包含:
- 亲切的早安问候; - 亲切的早安问候;
- 早安问候后立即列出北京、上海、广州、深圳当天的天气信息,每行格式为“城市:天气描述,最低温~最高温”;天气需调用 weather_mcp_server 获取;
- 标注“领奖请私聊站长 @[nagisa]”;
- 鼓励大家留言互动。
3. 奖品信息
- 明确奖品写作“Coffee”; - 明确奖品写作“Coffee”;
- 帖子类型必须为 LOTTERY - 帖子类型必须为 LOTTERY
- 奖品图片链接:https://openisle-1307107697.cos.accelerate.myqcloud.com/dynamic_assert/0d6a9b33e9ca4fe5a90540187d3f9ecb.png - 奖品图片链接:https://openisle-1307107697.cos.accelerate.myqcloud.com/dynamic_assert/0d6a9b33e9ca4fe5a90540187d3f9ecb.png
- 公布开奖时间为 ${drawTime}, 直接传UTC时间给接口,不要考虑时区问题 - 公布开奖时间为 ${drawTime}, 直接传UTC时间给接口,不要考虑时区问题
- 标注“领奖请私聊站长 @[nagisa]”; - categoryId 固定为 10tagIds 设为 [36]。
- 鼓励大家留言互动。
3. 调用 create_post 时 categoryId 固定为 10tagIds 设为 [36]。
4. 帖子语言使用简体中文。 4. 帖子语言使用简体中文。
5. 完成后只输出“已发布咖啡抽奖贴”,不额外生成总结。
`.trim(); `.trim();
} }
} }