diff --git a/index.js b/index.js
new file mode 100644
index 0000000..54177fa
--- /dev/null
+++ b/index.js
@@ -0,0 +1,151 @@
+export default {
+ async fetch(request, env, ctx) {
+ // Handle CORS preflight requests
+ if (request.method === 'OPTIONS') {
+ return new Response(null, {
+ status: 204,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'POST, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type',
+ 'Access-Control-Max-Age': '86400',
+ },
+ });
+ }
+
+ if (request.method !== 'POST') {
+ return new Response('Method not allowed', {
+ status: 405,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ }
+ });
+ }
+
+ try {
+ const contentType = request.headers.get('content-type');
+ let text;
+
+ if (contentType && contentType.includes('application/json')) {
+ const body = await request.json();
+ text = body.text;
+ } else if (contentType && contentType.includes('application/x-www-form-urlencoded')) {
+ const formData = await request.formData();
+ text = formData.get('text');
+ } else {
+ return new Response('Content-Type must be application/json or application/x-www-form-urlencoded', {
+ status: 400,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ }
+ });
+ }
+
+ if (!text) {
+ return new Response('Missing text parameter', {
+ status: 400,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ }
+ });
+ }
+
+ // Collect client request information
+ const clientIP = request.headers.get('CF-Connecting-IP') ||
+ request.headers.get('X-Forwarded-For') ||
+ request.headers.get('X-Real-IP') ||
+ 'Unknown';
+
+ const userAgent = request.headers.get('User-Agent') || 'Unknown';
+ const country = request.cf?.country || 'Unknown';
+ const city = request.cf?.city || 'Unknown';
+ const region = request.cf?.region || 'Unknown';
+ const latitude = request.cf?.latitude || 'Unknown';
+ const longitude = request.cf?.longitude || 'Unknown';
+ const timezone = request.cf?.timezone || 'Unknown';
+ const url = request.url || 'Unknown';
+ const timestamp = new Date().toISOString();
+
+ // Format the message with request information
+ const hasCoordinates = latitude !== 'Unknown' && longitude !== 'Unknown';
+ const mapLink = hasCoordinates
+ ? `https://www.google.com/maps?q=${latitude},${longitude}`
+ : null;
+
+ const requestInfo = `IP: ${clientIP} 🔍
+Browser: ${userAgent}
+Country: ${country}
+Region: ${region}
+City: ${city}
+Coordinates: ${latitude}, ${longitude}${mapLink ? ` 📍` : ''}
+Timezone: ${timezone}
+Timestamp: ${timestamp}
+Original text:`;
+
+ const formattedMessage = `${requestInfo}
+
+${text}`;
+
+ const telegramToken = env.TELEGRAM_TOKEN;
+ const telegramChatId = env.TELEGRAM_CHAT_ID;
+
+ if (!telegramToken || !telegramChatId) {
+ return new Response('Missing TELEGRAM_TOKEN or TELEGRAM_CHAT_ID environment variables', {
+ status: 500,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ }
+ });
+ }
+
+ const telegramUrl = `https://api.telegram.org/bot${telegramToken}/sendMessage`;
+ const telegramPayload = {
+ chat_id: telegramChatId,
+ text: formattedMessage,
+ parse_mode: 'HTML'
+ };
+
+ const telegramResponse = await fetch(telegramUrl, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(telegramPayload)
+ });
+
+ const telegramResult = await telegramResponse.json();
+
+ if (!telegramResponse.ok) {
+ return new Response(JSON.stringify({
+ success: false
+ }), {
+ status: 500,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ }
+ });
+ }
+
+ return new Response(JSON.stringify({
+ success: true
+ }), {
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ }
+ });
+
+ } catch (error) {
+ return new Response(JSON.stringify({
+ success: false
+ }), {
+ status: 500,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Access-Control-Allow-Origin': '*',
+ }
+ });
+ }
+ },
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..63e8a42
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "devDependencies": {
+ "wrangler": "^4.0.0"
+ }
+}
diff --git a/wrangler.toml b/wrangler.toml
new file mode 100644
index 0000000..0735d39
--- /dev/null
+++ b/wrangler.toml
@@ -0,0 +1,3 @@
+name = "telegram-mcp"
+main = "index.js"
+compatibility_date = "2026-01-01"