diff --git a/server/package-lock.json b/server/package-lock.json
index e8c5cee..1710b53 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -8,7 +8,7 @@
             "name": "aqua-ls-server",
             "version": "0.0.1",
             "dependencies": {
-                "@fluencelabs/aqua-language-server-api": "0.0.4",
+                "@fluencelabs/aqua-language-server-api": "0.7.2-314",
                 "global-dirs": "^3.0.0",
                 "vscode-languageserver": "^7.0.0",
                 "vscode-languageserver-textdocument": "^1.0.4"
@@ -17,10 +17,19 @@
                 "node": "*"
             }
         },
+        "../../aqua/language-server": {
+            "extraneous": true
+        },
+        "../../aqua/language-server-npm": {
+            "name": "@fluencelabs/aqua-language-server-api",
+            "version": "0.0.3",
+            "extraneous": true,
+            "license": "Apache-2.0"
+        },
         "node_modules/@fluencelabs/aqua-language-server-api": {
-            "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-language-server-api/-/aqua-language-server-api-0.0.4.tgz",
-            "integrity": "sha512-K/CTsXfSD/kw2eJ7Fb+J+63PE7CQdU37Iv9DzmkgEngc07ClY7TzWnc/EeLB2pjqcxOZJ05qJuOSZKHEyOoIPg=="
+            "version": "0.7.2-314",
+            "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-language-server-api/-/aqua-language-server-api-0.7.2-314.tgz",
+            "integrity": "sha512-wKKPvdYfmqOQ7HafCXwXIi4z5QYrla54PdvXNA1HYFzEJZssxdr07tSeV+U+Kfq8t+R8EU93OATuWTlxdTKVng=="
         },
         "node_modules/global-dirs": {
             "version": "3.0.0",
@@ -85,9 +94,9 @@
     },
     "dependencies": {
         "@fluencelabs/aqua-language-server-api": {
-            "version": "0.0.4",
-            "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-language-server-api/-/aqua-language-server-api-0.0.4.tgz",
-            "integrity": "sha512-K/CTsXfSD/kw2eJ7Fb+J+63PE7CQdU37Iv9DzmkgEngc07ClY7TzWnc/EeLB2pjqcxOZJ05qJuOSZKHEyOoIPg=="
+            "version": "0.7.2-314",
+            "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-language-server-api/-/aqua-language-server-api-0.7.2-314.tgz",
+            "integrity": "sha512-wKKPvdYfmqOQ7HafCXwXIi4z5QYrla54PdvXNA1HYFzEJZssxdr07tSeV+U+Kfq8t+R8EU93OATuWTlxdTKVng=="
         },
         "global-dirs": {
             "version": "3.0.0",
diff --git a/server/package.json b/server/package.json
index 6cdc365..1d2d01b 100644
--- a/server/package.json
+++ b/server/package.json
@@ -11,10 +11,10 @@
         "url": "https://github.com/fluencelabs/aqua"
     },
     "dependencies": {
-        "vscode-languageserver": "^7.0.0",
-        "vscode-languageserver-textdocument": "^1.0.4",
+        "@fluencelabs/aqua-language-server-api": "0.7.2-314",
         "global-dirs": "^3.0.0",
-        "@fluencelabs/aqua-language-server-api": "0.0.4"
+        "vscode-languageserver": "^7.0.0",
+        "vscode-languageserver-textdocument": "^1.0.4"
     },
     "scripts": {
         "get-root": "npm root --globall"
diff --git a/server/src/server.ts b/server/src/server.ts
index 3d314af..519022a 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -11,6 +11,8 @@ import type { WorkspaceFolder } from 'vscode-languageserver-protocol';
 
 import { TextDocument } from 'vscode-languageserver-textdocument';
 import { compileAqua } from './validation';
+import type { DefinitionParams, Location } from 'vscode-languageserver';
+import type { TokenLink } from '@fluencelabs/aqua-language-server-api/aqua-lsp-api';
 
 // Create a connection for the server, using Node's IPC as a transport.
 // Also include all preview / proposed LSP features.
@@ -27,6 +29,12 @@ export interface Settings {
     imports: string[];
 }
 
+function searchDefinition(offset: number, name: string, locations: TokenLink[]): TokenLink | undefined {
+    return locations.find((token) => {
+        return token.current.name == name && token.current.start <= offset && token.current.end >= offset;
+    });
+}
+
 // The global settings, used when the `workspace/configuration` request is not supported by the client.
 // Please note that this is not the case when using this server with the client provided in this example
 // but could happen with other clients.
@@ -36,6 +44,36 @@ let globalSettings: Settings = defaultSettings;
 // Cache the settings of all open documents
 const documentSettings: Map<string, Thenable<Settings>> = new Map();
 
+let currentLocations: TokenLink[] = [];
+
+async function onDefinition({ textDocument, position }: DefinitionParams): Promise<Location[]> {
+    const doc = documents.get(textDocument.uri);
+    if (doc) {
+        const offset = doc.offsetAt(position);
+        const token = searchDefinition(offset, doc.uri.replace('file://', ''), currentLocations);
+        connection.console.log('find token: ' + JSON.stringify(token));
+        if (token) {
+            const definition = token.definition;
+            const defDoc = documents.get('file://' + definition.name);
+            if (defDoc) {
+                return [
+                    {
+                        uri: defDoc.uri,
+                        range: {
+                            start: defDoc.positionAt(definition.start),
+                            end: defDoc.positionAt(definition.end),
+                        },
+                    },
+                ];
+            }
+        }
+    }
+
+    return [];
+}
+
+connection.onDefinition(onDefinition);
+
 connection.onDidChangeConfiguration((change) => {
     connection.console.log(change.settings);
 
@@ -78,11 +116,8 @@ connection.onInitialize((params: InitializeParams) => {
 
     const result: InitializeResult = {
         capabilities: {
-            textDocumentSync: TextDocumentSyncKind.Incremental,
-            // Tell the client that this server supports code completion.
-            completionProvider: {
-                resolveProvider: true,
-            },
+            textDocumentSync: TextDocumentSyncKind.Full,
+            definitionProvider: true,
         },
     };
     if (hasWorkspaceFolderCapability) {
@@ -113,7 +148,9 @@ documents.onDidOpen(async (change) => {
 async function validateDocument(textDocument: TextDocument): Promise<void> {
     const settings = await getDocumentSettings(textDocument.uri);
 
-    const diagnostics = await compileAqua(settings, textDocument, folders);
+    const [diagnostics, locations] = await compileAqua(settings, textDocument, folders);
+
+    currentLocations = locations;
 
     // Send the computed diagnostics to VSCode.
     connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
diff --git a/server/src/validation.ts b/server/src/validation.ts
index ae8c671..cc8652c 100644
--- a/server/src/validation.ts
+++ b/server/src/validation.ts
@@ -1,5 +1,5 @@
 import type { TextDocument } from 'vscode-languageserver-textdocument';
-import { AquaLSP } from '@fluencelabs/aqua-language-server-api/aqua-lsp-api';
+import { AquaLSP, ErrorInfo, TokenLink } from '@fluencelabs/aqua-language-server-api/aqua-lsp-api';
 import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver/node';
 import type { Settings } from './server';
 import type { WorkspaceFolder } from 'vscode-languageserver-protocol';
@@ -8,7 +8,7 @@ export async function compileAqua(
     settings: Settings,
     textDocument: TextDocument,
     folders: WorkspaceFolder[],
-): Promise<Diagnostic[]> {
+): Promise<[Diagnostic[], TokenLink[]]> {
     const uri = textDocument.uri.replace('file://', '');
 
     let imports: string[] = [];
@@ -23,13 +23,13 @@ export async function compileAqua(
     }
 
     // compile aqua and get possible errors
-    const errors = await AquaLSP.compile(uri, imports);
+    const result = await AquaLSP.compile(uri, imports);
 
     const diagnostics: Diagnostic[] = [];
 
-    if (errors) {
+    if (result.errors) {
         // Add all errors to Diagnostic
-        errors.forEach((err) => {
+        result.errors.forEach((err: ErrorInfo) => {
             const diagnostic: Diagnostic = {
                 severity: DiagnosticSeverity.Error,
                 range: {
@@ -55,5 +55,5 @@ export async function compileAqua(
         });
     }
 
-    return diagnostics;
+    return [diagnostics, result.locations];
 }