aie-europe-2026

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

AI Engineer Europe 2026

2026年欧洲AI工程师大会

Conference data APIs, MCP server, and CLI for AI Engineer Europe 2026 (April 8-10, London).
面向2026年欧洲AI工程师大会(4月8日-10日,伦敦)的会议数据API、MCP服务器与CLI工具。

When to use this skill

适用场景

  • Building apps or dashboards with conference data
  • Querying speakers, talks, or schedule programmatically
  • Connecting an AI agent to the conference MCP server
  • Generating conference summaries, recommendations, or search features
  • Looking up who's speaking, what talks are on which day/track, or session details
  • 基于会议数据构建应用或仪表盘
  • 通过编程方式查询演讲者、议题或日程信息
  • 将AI Agent接入会议MCP服务器
  • 生成会议摘要、推荐内容或搜索功能
  • 查询演讲嘉宾信息、各日期/分会场的议题安排,以及会话详情

Endpoints

接口端点

Base URL:
https://ai.engineer
EndpointFormatDescription
/europe/llms.txt
Plain textConference overview optimized for LLM consumption
/europe/llms-full.txt
Plain textFull details — every talk, speaker bio, schedule
/europe/sessions.json
JSONAll sessions (talks + workshops) with titles, descriptions, speakers, times, rooms, tracks
/europe/speakers.json
JSONAll speakers with roles, companies, social links, photos, talks
/europe/mcp
JSON-RPCMCP server — tool calls for querying conference data
/europe/speakers-embeddings.json
JSONAll speakers with 128-dim Gemini Embedding 2 vectors
/europe/sessions-embeddings.json
JSONAll sessions with 128-dim Gemini Embedding 2 vectors
All endpoints are public, free, and CORS-enabled. Data is cached (
s-maxage=3600, stale-while-revalidate=86400
).
基础URL:
https://ai.engineer
端点格式描述
/europe/llms.txt
纯文本针对LLM消费优化的会议概览
/europe/llms-full.txt
纯文本全量详情 — 所有议题、演讲者简介、日程
/europe/sessions.json
JSON所有会话(议题+工作坊),包含标题、描述、演讲者、时间、会议室、分会场信息
/europe/speakers.json
JSON所有演讲者,包含职位、公司、社交链接、照片、参与议题信息
/europe/mcp
JSON-RPCMCP服务器 — 用于查询会议数据的工具调用接口
/europe/speakers-embeddings.json
JSON所有演讲者的128维Gemini Embedding 2向量
/europe/sessions-embeddings.json
JSON所有会话的128维Gemini Embedding 2向量
所有端点均公开免费,且支持CORS。数据已缓存(缓存策略:
s-maxage=3600, stale-while-revalidate=86400
)。

Embeddings

Embeddings

Pre-computed Gemini Embedding 2 vectors for semantic search, clustering, and recommendations.
The embedding JSON files include full metadata (name, company, role, talks, etc.) alongside the 128-dim vector for each speaker/session.
预计算的Gemini Embedding 2向量,可用于语义搜索、聚类和推荐场景。
Embedding的JSON文件包含完整元数据(姓名、公司、职位、参与议题等),以及对应每个演讲者/会话的128维向量。

Fetch embeddings (curl)

获取Embedding(curl)

bash
undefined
bash
undefined

Speaker embeddings (128-dim Gemini Embedding 2, MRL)

演讲者Embedding(128维Gemini Embedding 2, MRL)

Session embeddings

会话Embedding

undefined
undefined

JavaScript — cosine similarity search

JavaScript — 余弦相似度搜索

javascript
const res = await fetch('https://ai.engineer/europe/speakers-embeddings.json');
const { speakers } = await res.json();

// Cosine similarity
const dot = (a, b) => a.reduce((s, v, i) => s + v * b[i], 0);
const norm = (a) => Math.sqrt(dot(a, a));
const cosine = (a, b) => dot(a, b) / (norm(a) * norm(b));

// Compare against a query embedding (128-dim from Gemini)
const ranked = speakers
  .map(s => ({ name: s.name, score: cosine(queryEmbedding, s.embedding) }))
  .sort((a, b) => b.score - a.score)
  .slice(0, 5);
console.log(ranked);
javascript
const res = await fetch('https://ai.engineer/europe/speakers-embeddings.json');
const { speakers } = await res.json();

// 余弦相似度计算
const dot = (a, b) => a.reduce((s, v, i) => s + v * b[i], 0);
const norm = (a) => Math.sqrt(dot(a, a));
const cosine = (a, b) => dot(a, b) / (norm(a) * norm(b));

// 与查询Embedding对比(来自Gemini的128维向量)
const ranked = speakers
  .map(s => ({ name: s.name, score: cosine(queryEmbedding, s.embedding) }))
  .sort((a, b) => b.score - a.score)
  .slice(0, 5);
console.log(ranked);

Python — cosine similarity search

Python — 余弦相似度搜索

python
import json, urllib.request, numpy as np

data = json.loads(urllib.request.urlopen('https://ai.engineer/europe/speakers-embeddings.json').read())
speakers = data['speakers']

def cosine(a, b):
    a, b = np.array(a), np.array(b)
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

ranked = sorted(speakers, key=lambda s: cosine(query_emb, s['embedding']), reverse=True)[:5]
for s in ranked:
    print(s['name'], s.get('company', ''))
python
import json, urllib.request, numpy as np

data = json.loads(urllib.request.urlopen('https://ai.engineer/europe/speakers-embeddings.json').read())
speakers = data['speakers']

def cosine(a, b):
    a, b = np.array(a), np.array(b)
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

ranked = sorted(speakers, key=lambda s: cosine(query_emb, s['embedding']), reverse=True)[:5]
for s in ranked:
    print(s['name'], s.get('company', ''))

Generate your own query embedding (to search against pre-computed vectors)

生成自定义查询Embedding(用于匹配预计算向量)

bash
undefined
bash
undefined

Use the Gemini API with the same model + MRL dimensionality

使用相同模型和MRL维度调用Gemini API

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent?key=$GEMINI_API_KEY"
-H 'Content-Type: application/json'
-d '{ "model": "models/gemini-embedding-2-preview", "content": { "parts": [{ "text": "autonomous coding agents" }] }, "taskType": "RETRIEVAL_QUERY", "outputDimensionality": 128 }'
undefined
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent?key=$GEMINI_API_KEY"
-H 'Content-Type: application/json'
-d '{ "model": "models/gemini-embedding-2-preview", "content": { "parts": [{ "text": "autonomous coding agents" }] }, "taskType": "RETRIEVAL_QUERY", "outputDimensionality": 128 }'
undefined

Quick start

快速开始

curl

curl

bash
undefined
bash
undefined

Plain text overview (good for piping to an LLM)

纯文本概览(适合传给LLM处理)

Full conference dump

全量会议数据

Structured JSON

结构化JSON数据

undefined
undefined

CLI (
@aidotengineer/aie
)

CLI (
@aidotengineer/aie
)

No install needed — runs via npx:
bash
npx @aidotengineer/aie --list              # List all conferences
npx @aidotengineer/aie europe              # Europe conference info
npx @aidotengineer/aie eu speakers         # All speakers
npx @aidotengineer/aie eu speakers --search "Anthropic"
npx @aidotengineer/aie eu sessions --day "April 9"
npx @aidotengineer/aie eu sessions --type workshop
npx @aidotengineer/aie eu search "agents"  # Full-text search
npx @aidotengineer/aie eu speakers --json  # Raw JSON output
npx @aidotengineer/aie eu mcp             # MCP connection info
无需安装,可通过npx直接运行:
bash
npx @aidotengineer/aie --list              # 列出所有会议
npx @aidotengineer/aie europe              # 欧洲大会信息
npx @aidotengineer/aie eu speakers         # 所有演讲者
npx @aidotengineer/aie eu speakers --search "Anthropic"
npx @aidotengineer/aie eu sessions --day "April 9"
npx @aidotengineer/aie eu sessions --type workshop
npx @aidotengineer/aie eu search "agents"  # 全文搜索
npx @aidotengineer/aie eu speakers --json  # 原始JSON输出
npx @aidotengineer/aie eu mcp             # MCP连接信息

JavaScript / TypeScript

JavaScript / TypeScript

typescript
const res = await fetch('https://ai.engineer/europe/speakers.json');
const { speakers, totalSpeakers } = await res.json();

// Find speakers from Anthropic
const anthropic = speakers.filter(s =>
  s.company?.toLowerCase().includes('anthropic')
);
console.log(`${anthropic.length} speakers from Anthropic`);

// Get all keynotes
const data = await fetch('https://ai.engineer/europe/sessions.json').then(r => r.json());
const keynotes = data.sessions.filter(t => t.type === 'keynote');
console.log(keynotes.map(k => `${k.time}: ${k.title}${k.speakers.join(', ')}`));
typescript
const res = await fetch('https://ai.engineer/europe/speakers.json');
const { speakers, totalSpeakers } = await res.json();

// 筛选来自Anthropic的演讲者
const anthropic = speakers.filter(s =>
  s.company?.toLowerCase().includes('anthropic')
);
console.log(`${anthropic.length} speakers from Anthropic`);

// 获取所有主旨演讲
const data = await fetch('https://ai.engineer/europe/sessions.json').then(r => r.json());
const keynotes = data.sessions.filter(t => t.type === 'keynote');
console.log(keynotes.map(k => `${k.time}: ${k.title}${k.speakers.join(', ')}`));

Python

Python

python
import requests
python
import requests

--- Fetch and explore sessions ---

--- 获取并浏览会话信息 ---

data = requests.get('https://ai.engineer/europe/sessions.json').json() print(f"{data['totalSessions']} sessions across {data['dates']}")
data = requests.get('https://ai.engineer/europe/sessions.json').json() print(f"{data['totalSessions']} sessions across {data['dates']}")

Day 2 sessions

第2天的会话

day2 = [s for s in data['sessions'] if s.get('day') == 'April 9'] for s in day2: speakers = ', '.join(s.get('speakers', [])) print(f"{s.get('time', '?')}: {s.get('title', 'TBA')} — {speakers}")
day2 = [s for s in data['sessions'] if s.get('day') == 'April 9'] for s in day2: speakers = ', '.join(s.get('speakers', [])) print(f"{s.get('time', '?')}: {s.get('title', 'TBA')} — {speakers}")

Sessions about agents

与Agent相关的会话

agent_sessions = [s for s in data['sessions'] if 'agent' in (s.get('title') or '').lower() or s.get('track', '').lower() == 'ai agents'] print(f"\n{len(agent_sessions)} sessions about agents")
agent_sessions = [s for s in data['sessions'] if 'agent' in (s.get('title') or '').lower() or s.get('track', '').lower() == 'ai agents'] print(f"\n{len(agent_sessions)} sessions about agents")

--- Fetch speakers ---

--- 获取演讲者信息 ---

Speakers with GitHub profiles

有GitHub主页的演讲者

with_github = [s for s in sp['speakers'] if s.get('github')] print(f"\n{len(with_github)} speakers with GitHub profiles") for s in with_github[:5]: print(f" {s['name']} ({s.get('company', '?')}): {s['github']}")
with_github = [s for s in sp['speakers'] if s.get('github')] print(f"\n{len(with_github)} speakers with GitHub profiles") for s in with_github[:5]: print(f" {s['name']} ({s.get('company', '?')}): {s['github']}")

Group speakers by company

按公司分组统计演讲者数量

from collections import Counter companies = Counter(s.get('company') for s in sp['speakers'] if s.get('company')) for company, count in companies.most_common(10): print(f" {company}: {count} speakers")
undefined
from collections import Counter companies = Counter(s.get('company') for s in sp['speakers'] if s.get('company')) for company, count in companies.most_common(10): print(f" {company}: {count} speakers")
undefined

Python — MCP tool call

Python — MCP工具调用

python
import requests
import json

MCP_URL = 'https://ai.engineer/europe/mcp'

def mcp_call(tool_name: str, arguments: dict = {}) -> dict:
    """Call an MCP tool and return the parsed result."""
    resp = requests.post(MCP_URL, json={
        'jsonrpc': '2.0',
        'id': 1,
        'method': 'tools/call',
        'params': {'name': tool_name, 'arguments': arguments}
    }, headers={'Content-Type': 'application/json', 'Accept': 'application/json'})
    result = resp.json()['result']['content'][0]['text']
    return json.loads(result)
python
import requests
import json

MCP_URL = 'https://ai.engineer/europe/mcp'

def mcp_call(tool_name: str, arguments: dict = {}) -> dict:
    """调用MCP工具并返回解析后的结果"""
    resp = requests.post(MCP_URL, json={
        'jsonrpc': '2.0',
        'id': 1,
        'method': 'tools/call',
        'params': {'name': tool_name, 'arguments': arguments}
    }, headers={'Content-Type': 'application/json', 'Accept': 'application/json'})
    result = resp.json()['result']['content'][0]['text']
    return json.loads(result)

Get conference info

获取会议信息

info = mcp_call('get_conference_info') print(f"{info['name']} — {info['dates']} — {info['location']}")
info = mcp_call('get_conference_info') print(f"{info['name']} — {info['dates']} — {info['location']}")

Search speakers

搜索演讲者

speakers = mcp_call('list_speakers', {'search': 'Google'}) for s in speakers['speakers']: print(f" {s['name']}: {s.get('role', '')} @ {s.get('company', '')}")
speakers = mcp_call('list_speakers', {'search': 'Google'}) for s in speakers['speakers']: print(f" {s['name']}: {s.get('role', '')} @ {s.get('company', '')}")

Get Day 2 keynotes

获取第2天的主旨演讲

keynotes = mcp_call('list_sessions', {'day': 'April 9', 'type': 'keynote'}) for t in keynotes['sessions']: print(f" {t['time']}: {t['title']} — {', '.join(t['speakers'])}")
keynotes = mcp_call('list_sessions', {'day': 'April 9', 'type': 'keynote'}) for t in keynotes['sessions']: print(f" {t['time']}: {t['title']} — {', '.join(t['speakers'])}")

Get schedule for one day

获取单日日程

schedule = mcp_call('get_schedule', {'day': 'April 10'}) for session in schedule['days'][0]['sessions']: print(f" {session.get('time', '?')}: {session.get('title', 'TBA')}")
undefined
schedule = mcp_call('get_schedule', {'day': 'April 10'}) for session in schedule['days'][0]['sessions']: print(f" {session.get('time', '?')}: {session.get('title', 'TBA')}")
undefined

MCP server

MCP服务器

The MCP server at
https://ai.engineer/europe/mcp
implements JSON-RPC 2.0 over Streamable HTTP.
部署在
https://ai.engineer/europe/mcp
的MCP服务器基于可流式HTTP实现了JSON-RPC 2.0协议。

Client config

客户端配置

Add to your Claude Desktop, Cursor, Windsurf, or any MCP client config:
json
{
  "mcpServers": {
    "aie-europe": {
      "url": "https://ai.engineer/europe/mcp"
    }
  }
}
添加到你的Claude Desktop、Cursor、Windsurf或任意MCP客户端配置中:
json
{
  "mcpServers": {
    "aie-europe": {
      "url": "https://ai.engineer/europe/mcp"
    }
  }
}

Available tools

可用工具

ToolDescriptionOptional params
get_conference_info
Dates, venue, links, metadata
list_speakers
Speakers with roles, companies, socials, sessions
search
list_sessions
Sessions with descriptions, times, rooms, tracks
day
,
type
,
track
,
search
get_schedule
Full schedule organized by day
day
工具描述可选参数
get_conference_info
日期、场地、链接、元数据
list_speakers
演讲者信息,包含职位、公司、社交账号、参与会话
search
list_sessions
会话信息,包含描述、时间、会议室、分会场
day
,
type
,
track
,
search
get_schedule
按日期整理的完整日程
day

Example tool call (curl)

工具调用示例(curl)

bash
curl -X POST https://ai.engineer/europe/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "list_speakers",
      "arguments": { "search": "Anthropic" }
    }
  }'
bash
curl -X POST https://ai.engineer/europe/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "list_speakers",
      "arguments": { "search": "Anthropic" }
    }
  }'

Example tool call (Python)

工具调用示例(Python)

python
import requests, json

resp = requests.post('https://ai.engineer/europe/mcp', json={
    'jsonrpc': '2.0', 'id': 1,
    'method': 'tools/call',
    'params': {'name': 'list_sessions', 'arguments': {'track': 'MCP'}}
}, headers={'Content-Type': 'application/json', 'Accept': 'application/json'})

result = json.loads(resp.json()['result']['content'][0]['text'])
for s in result['sessions']:
    print(f"{s['title']}{', '.join(s['speakers'])}")
python
import requests, json

resp = requests.post('https://ai.engineer/europe/mcp', json={
    'jsonrpc': '2.0', 'id': 1,
    'method': 'tools/call',
    'params': {'name': 'list_sessions', 'arguments': {'track': 'MCP'}}
}, headers={'Content-Type': 'application/json', 'Accept': 'application/json'})

result = json.loads(resp.json()['result']['content'][0]['text'])
for s in result['sessions']:
    print(f"{s['title']}{', '.join(s['speakers'])}")

Initialize + discover tools

初始化 + 工具发现

bash
undefined
bash
undefined

Initialize session

初始化会话

curl -X POST https://ai.engineer/europe/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-client","version":"1.0.0"}}}'
curl -X POST https://ai.engineer/europe/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-client","version":"1.0.0"}}}'

List tools

列出所有工具

curl -X POST https://ai.engineer/europe/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
curl -X POST https://ai.engineer/europe/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

GET also returns server info + tool definitions

GET请求也会返回服务器信息和工具定义


See `references/MCP.md` for full tool schemas and response formats.

完整的工具Schema和响应格式可查看`references/MCP.md`。

Data model

数据模型

Talk

议题

typescript
type PublicTalk = {
  title?: string;
  description?: string;
  day?: string;        // "April 8" | "April 9" | "April 10"
  time?: string;       // "9:00-9:30am"
  room?: string;       // "Keynote" | "Abbey" | "Fleming" | "Moore" | "St. James" | "Westminster"
  type?: string;       // "keynote" | "talk" | "workshop" | "panel" | "break"
  track?: string;      // "AI Agents" | "Coding Agents" | "MCP" | "Open Source" | "GPUs & LLM Infrastructure" | ...
  speakers: string[];
};
typescript
type PublicTalk = {
  title?: string;
  description?: string;
  day?: string;        // "April 8" | "April 9" | "April 10"
  time?: string;       // "9:00-9:30am"
  room?: string;       // "Keynote" | "Abbey" | "Fleming" | "Moore" | "St. James" | "Westminster"
  type?: string;       // "keynote" | "talk" | "workshop" | "panel" | "break"
  track?: string;      // "AI Agents" | "Coding Agents" | "MCP" | "Open Source" | "GPUs & LLM Infrastructure" | ...
  speakers: string[];
};

Speaker

演讲者

typescript
type PublicSpeaker = {
  name: string;
  role?: string;
  company?: string;
  companyDescription?: string;
  twitter?: string;    // Full URL: "https://x.com/handle"
  linkedin?: string;   // Full URL
  github?: string;     // Full URL
  website?: string;
  photoUrl?: string;   // "https://ai.engineer/europe-speakers/name.jpg"
  sessions: PublicTalk[];
};
See
references/SCHEMAS.md
for full response envelope structures and real API response examples.
See
references/EXAMPLES.md
for 4 complete TS + Python recipes: topic index, semantic embed/cluster/retrieve, multi-track day planner, and speaker social graph.
typescript
type PublicSpeaker = {
  name: string;
  role?: string;
  company?: string;
  companyDescription?: string;
  twitter?: string;    // 完整URL: "https://x.com/handle"
  linkedin?: string;   // 完整URL
  github?: string;     // 完整URL
  website?: string;
  photoUrl?: string;   // "https://ai.engineer/europe-speakers/name.jpg"
  sessions: PublicTalk[];
};
完整的响应封装结构和真实API响应示例可查看
references/SCHEMAS.md
4个完整的TS+Python实践案例(主题索引、语义嵌入/聚类/检索、多分会场日程规划、演讲者社交图谱)可查看
references/EXAMPLES.md

Edge cases

边界情况

  • Some sessions have empty
    description
    — fall back to title + speakers
  • speakers
    array can be empty for break/logistics sessions
  • type
    field may be missing for some sessions — treat as "talk"
  • Speaker photos are served from
    ai.engineer/europe-speakers/
    — some speakers may not have a photo
  • Social links (twitter, linkedin, github) are full URLs when present,
    undefined
    when absent
  • The
    track
    field only exists on Day 2-3 multi-track sessions; Day 1 workshops don't have tracks
  • 部分会话的
    description
    字段为空,可降级使用标题+演讲者信息展示
  • 休息/后勤类会话的
    speakers
    数组可能为空
  • 部分会话可能缺失
    type
    字段,可默认视为"talk"
  • 演讲者照片托管在
    ai.engineer/europe-speakers/
    下,部分演讲者可能没有照片
  • 社交链接(twitter、linkedin、github)存在时为完整URL,不存在时为
    undefined
  • track
    字段仅存在于第2-3天的多分会场会话中,第1天的工作坊没有分会场字段

Sensitive fields (never exposed)

敏感字段(永不对外暴露)

These fields exist in the source data but are stripped from all public endpoints:
  • contact.email
    — speaker email addresses
  • notes
    — internal organizer notes
  • acceleventsSpeakerId
    — internal Accelevents IDs
  • sessionId
    — internal session identifiers
  • invited
    — whether speaker was invited vs CFP
  • cfpData
    — call for papers submissions and review status
这些字段存在于源数据中,但所有公开端点都会进行剔除:
  • contact.email
    — 演讲者邮箱地址
  • notes
    — 组织者内部备注
  • acceleventsSpeakerId
    — 内部Accelevents ID
  • sessionId
    — 内部会话标识符
  • invited
    — 演讲者是受邀还是通过CFP入选
  • cfpData
    — CFP提交和评审状态信息

Links

相关链接